175

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

当我尝试以这种方式加载时,调试器给了我这个错误:

对象不支持属性或方法“ includes

当我通过 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')});
            };
        });
});
4

8 回答 8

243

根据MDN 参考页面includesInternet Explorer 不支持。最简单的替代方法是使用indexOf,如下所示:

if(window.location.hash.indexOf("?") >= 0) {
    ...
}
于 2015-06-29T15:21:43.523 回答
57

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 来源

于 2017-02-02T01:12:05.927 回答
37

添加import 'core-js/es7/array';到我为我polyfill.ts解决的问题。

于 2018-10-03T15:32:28.410 回答
15

我在 Angular 项目中遇到了类似的问题。在我的 polyfills.ts 中,我必须同时添加:

    import "core-js/es7/array";
    import "core-js/es7/object";

除了启用所有其他 IE 11 默认值。(如果使用角度,请参阅 polyfills.ts 中的注释)

添加这些导入后,错误消失了,我的对象数据按预期填充。

于 2019-02-08T19:56:46.353 回答
6

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

dijit.form.FilteringSelect TypeError:对象不支持属性或方法“包含”

所以我将 JavaScript 字符串方法从“includes”更改为“indexOf”,如下所示

//str1 doesn't match str2 w.r.t 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");
}
于 2016-04-01T10:52:09.823 回答
3

我用过includes的 from Lodashwhich 和 native 真的很相似。

于 2017-09-01T01:02:56.527 回答
1

我正在使用 ReactJs 并import 'core-js/es6/string';在开始时使用它index.js来解决我的问题。

我也import 'react-app-polyfill/ie11';用来支持在 IE11 中运行 React。

反应应用程序-polyfill

该软件包包括适用于各种浏览器的 polyfill。它包括 Create React App 项目使用的最低要求和常用语言功能。

https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md

于 2019-03-26T12:35:38.870 回答
0

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

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

然后我把所有的都换.includes().doesInclude(),我的问题就解决了。

于 2017-09-07T01:32:08.217 回答