web-dev-qa-db-fra.com

SCRIPT438: L'objet ne prend pas en charge la propriété ou la méthode 'endsWith' dans IE10

J'ai une fonction ci-dessous qui fonctionne très bien dans Chrome, mais sa donne l'erreur ci-dessous dans IE10 SCRIPT438: Object doesn't support property or method 'endsWith'

function getUrlParameter(URL, param){
    var paramTokens = URL.slice(URL.indexOf('?') + 1).split('&');
    for (var i = 0; i < paramTokens.length; i++) {
    var urlParams = paramTokens[i].split('=');
    if (urlParams[0].endsWith(param)) {
        return urlParams[1];
    }
  }
}

Quelqu'un peut-il me dire ce qui ne va pas avec cette fonction?

17
RanPaul

Mis en œuvre endsWith comme ci-dessous

String.prototype.endsWith = function(pattern) {
  var d = this.length - pattern.length;
  return d >= 0 && this.lastIndexOf(pattern) === d;
};
37
RanPaul

Vous devez utiliser le code suivant pour implémenter endsWith dans les navigateurs qui ne le prennent pas en charge:

if (!String.prototype.endsWith) {
    String.prototype.endsWith = function(search, this_len) {
        if (this_len === undefined || this_len > this.length) {
            this_len = this.length;
        }
        return this.substring(this_len - search.length, this_len) === search;
    };
}

Ceci provient directement de Mozilla Developer Network et est conforme aux normes, contrairement à l’autre réponse donnée jusqu’à présent.

16
ErikE

IE v.11 et versions ultérieures ne prennent pas en charge certaines propriétés de l'ES6 telles que set, endsWith, etc. Vous devez donc ajouter des polyfill pour les propriétés individuelles de l'ES6. Pour faciliter le processus, vous pouvez utiliser un compilateur tel que Babel JS ou des bibliothèques externes comme polyfill.js etc.

Pour les fins, ajoutez l'extrait de code ci-dessous avant la balise dans votre index.html ou avant que le regroupement ait lieu.

if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(searchString, position) {
      var subjectString = this.toString();
      if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
        position = subjectString.length;
      }
      position -= searchString.length;
      var lastIndex = subjectString.indexOf(searchString, position);
      return lastIndex !== -1 && lastIndex === position;
  };
}
0
abhijit padhy