Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sticky States v1.5.0 throws error in IE 11 (Object doesn't support property or method 'find') #36

Closed
molehillrocker opened this issue Feb 6, 2018 · 2 comments

Comments

@molehillrocker
Copy link

The most recent version of the Sticky States plugin is currently not usable in IE 11, since it throws an error when transitioning to the initial state (see screenshot).

image

I think that this was introduced in commit 3696bf9f (line 88) and the reason for the error is that IE simply does not support method Array.prototype.find().

@rukhsarneyaz
Copy link

Hey @molehillrocker I am facing the same issue. I included the below polyfill in my code and now its working fine in IE 11.

if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {

value: function(predicate) {

 // 1. Let O be ? ToObject(this value).

  if (this == null) {
    throw new TypeError('"this" is null or not defined');
  }

  var o = Object(this);

  // 2. Let len be ? ToLength(? Get(O, "length")).
  var len = o.length >>> 0;

  // 3. If IsCallable(predicate) is false, throw a TypeError exception.
  if (typeof predicate !== 'function') {
    throw new TypeError('predicate must be a function');
  }

  // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
  var thisArg = arguments[1];

  // 5. Let k be 0.
  var k = 0;

  // 6. Repeat, while k < len
  while (k < len) {
    // a. Let Pk be ! ToString(k).
    // b. Let kValue be ? Get(O, Pk).
    // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
    // d. If testResult is true, return kValue.
    var kValue = o[k];
    if (predicate.call(thisArg, kValue, k, o)) {
      return kValue;
    }
    // e. Increase k by 1.
    k++;
  }

  // 7. Return undefined.
  return undefined;
},
configurable: true,
writable: true});}

I got the code from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Polyfill

@molehillrocker
Copy link
Author

molehillrocker commented Jan 18, 2019

Thanks for the hint, @rukhsarneyaz. We're also using Polyfills now, since we have a couple of other dependencies in that recently started to use language features not supported by IE11.

I'm gonna close this for now, since Polyfills are the way to go. Maybe this can be added to the docs, so that others are informed too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants