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()
,我的问题就解决了。