IE11 – 对象不支持属性或方法'包括' – javascript的window.location.hash

我正在检查url,看看它是否包含或包含? 在其中控制窗口中的哈希popup状态。 所有其他浏览器只有IE没有问题。

debugging器给我这个错误,当我尝试以这种方式加载对象不支持属性或方法“包括”

当我通过popstate加载页面时,我没有得到任何错误

$(document).ready(function(e) { if(window.location.hash) { var hash; if(window.location.hash.includes("?")) { alert('I have a ?'); hash = window.location.hash.substring(window.location.hash.indexOf('#') + 0,window.location.hash.indexOf('?')); }else { hash = window.location.hash; }; if (hash=="#DRS" || hash=="#DRP" || hash=="#DFFI" || hash=="#DCI" || hash=="#DCP" || hash=="#DRP" || hash=="#DRMA" || hash=="#EICS" || hash=="#ORG"){ $(hash+'Content').addClass('pageOn').removeClass('pageOff'); }else { $('#homeContent').addClass('pageOn').removeClass('pageOff'); }; } else { $('#homeContent').addClass('pageOn').removeClass('pageOff'); } $(window).on('popstate', function() { var hash; if(window.location.hash.includes("?")) { hash = window.location.hash.substring(window.location.hash.indexOf('#') + 0,window.location.hash.indexOf('?')); }else { hash = window.location.hash; }; if (hash=="#DRS" || hash=="#DRP" || hash=="#DFFI" || hash=="#DCI" || hash=="#DCP" || hash=="#DRP" || hash=="#DRMA" || hash=="#EICS" || hash=="#ORG"){ $(this).navigate({target: $(hash+'Content')}); if(window.location.hash.includes("?")) { }else{ location.href = location.href+'?'; } }else { $(this).navigate({target: $('#homeContent')}); }; }); }); 

根据MDN参考页面 ,Internet Explorer不支持includes 。 最简单的select是使用indexOf ,如下所示:

 if(window.location.hash.indexOf("?") >= 0) { ... } 

IE11确实实现了String.prototype.includes所以为什么不使用官方Polyfill?

  if (!String.prototype.includes) { String.prototype.includes = function(search, start) { if (typeof start !== 'number') { start = 0; } if (start + search.length > this.length) { return false; } else { return this.indexOf(search, start) !== -1; } }; } 

来源: polyfill来源

与Internet Explorer中一样,javascript方法“includes”不支持导致错误的如下所示

dijit.form.FilteringSelect TypeError:对象不支持属性或方法'includes'

所以我已经将JavaScriptstring方法从“includes”更改为“indexOf”,如下所示

 //str1 doesn't match str2 wrt index, so it will try to add object var str1="acd", str2="b"; if(str1.indexOf(str2) == -1) { alert("add object"); } else { alert("object not added"); } 

希望这段代码将有助于解决IE问题

问候

Satish M Hiremath

我使用的是来自Lodash与本地非常相似的内容。

这个问题及其答案使我有了自己的解决scheme(在SO的帮助下),尽pipe有人说你不应该篡改原生的原型:

  // IE does not support .includes() so I'm making my own: String.prototype.doesInclude=function(needle){ return this.substring(needle) != -1; } 

然后我用.doesInclude()replace了所有.includes() ,我的问题就解决了。