【问题标题】:Error in IE 11 browser - EXCEPTION: Object doesn't support property or method 'matches' , other browser it works fineIE 11 浏览器中的错误 - 例外:对象不支持属性或方法“匹配”,其他浏览器工作正常
【发布时间】:2017-10-12 17:02:26
【问题描述】:

在我的情况下,该网页在 Firefox 和 chrome 浏览器中运行良好,但在 IE v.11 中显示错误为error comes in IE 11 DEVELOPER TOOLS。该错误显示在 IE 11 的开发人员工具中。该错误不允许打开特定链接,单击它会显示以下错误。

polyfills.ts -

* BROWSER POLYFILLS
 */

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/set';

/** IE10 and IE11 requires the following for NgClass support on SVG elements */
import 'classlist.js';  // Run `npm install --save classlist.js`.

/** IE10 and IE11 requires the following to support `@angular/animation`. */
 import 'web-animations-js';  // Run `npm install --save web-animations-js`.


/** Evergreen browsers require these. **/
import 'core-js/es6/reflect';
import 'core-js/es7/reflect';


/** ALL Firefox browsers require the following to support `@angular/animation`. **/
// import 'web-animations-js';  // Run `npm install --save web-animations-js`.



/***************************************************************************************************
 * Zone JS is required by Angular itself.
 */
import 'zone.js/dist/zone';  // Included with Angular CLI.



/***************************************************************************************************
 * APPLICATION IMPORTS
 */

/**
 * Date, currency, decimal and percent pipes.
 * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
 */
// import 'intl';  // Run `npm install --save intl`.

tsconfig.spec.json -

"compilerOptions": {
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "es2016"
    ],
    "outDir": "../out-tsc/spec",
    "module": "commonjs",
    "target": "es6",
    "baseUrl": "",
    "types": [
      "jasmine",
      "node"
    ]
  },
  "files": [
    "test.ts"
  ],
  "include": [
    "**/*.spec.ts"
  ]
}

tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "target": "es5",
    "experimentalDecorators": true,
    "lib": [
      "es2015"
    ]
  }
}

【问题讨论】:

  • 我认为窗口带有红色下划线的事实与您遇到的错误无关。
  • 你能发布一份你的 typescript 配置的副本,以及你正在使用的任何 polyfill 吗?
  • @DerekBrown 肯定会在问题描述中更新。
  • @DerekBrown 我能够摆脱stackoverflow.com/questions/41336301/… 的红色下划线问题。所以现在我没有任何 window.onload 问题。但仍然在 IE11 中我确实有这个错误。
  • @DerekBrown - 我找到了一些链接,但不知道在哪里使用它以及如何在这个问题上使用它,即前缀 ms matchselector github.com/WICG/inert/issues/51

标签: javascript angular typescript internet-explorer


【解决方案1】:

在将项目从 Angular 5 更新到 6 后,我遇到了同样的问题。我在 Derek Brown 的评论的帮助下找到了解决方案。解决方法是在polyfill.ts文件中添加以下内容:

if (!Element.prototype.matches) {
  Element.prototype.matches = Element.prototype.msMatchesSelector;
}

【讨论】:

    【解决方案2】:

    对于那些使用 Angular 6 和 7(打字稿)的人,您应该在下面修改 Sanjay Gupta 的答案:

    if (!Element.prototype.matches) {
      Element.prototype.matches = (<any>Element.prototype).msMatchesSelector ||
        Element.prototype.webkitMatchesSelector;
    }
    

    强制转换(好吧,实际上是非类型化)允许转译器解析未定义的方法。

    【讨论】:

    【解决方案3】:

    看起来 IE 使用非标准名称 (source) 实现了 matches 函数。该链接包含一个 polyfill,它将定义 matches 函数,因此它可以在 IE 上使用。

    【讨论】:

    • 那么在 polyfills.ts 中我应该在哪里添加匹配函数
    • 在现有 polyfill 导入的下方应该没问题。
    • 你能告诉我语法吗,因为它在这里显示错误为“找不到元素”。
    • 所以我在其他导入下面包含了 polyfill - if (!Element.prototype.matches) Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;但它出现了红色下划线并表示“元素上不存在属性匹配”
    • @stec1 如果您仍在阅读,我在下面提供了一个答案,可以解决打字稿中的问题(考虑到您遇到的错误,我想您正在使用这个答案)
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多