IE 11浏览器出错 - EXCEPTION:对象不支持属性或方法'匹配',其他浏览器工作正常

ste*_*ec1 16 javascript internet-explorer typescript angular

在我的情况下,网页在Firefox和Chrome浏览器中工作正常但在IE v.11中它显示错误,因为 错误来自IE 11开发工具.错误显示在IE 11的开发人员工具中.错误不允许打开特定链接,单击它时显示以下错误.

在所有浏览器中它运行正常但在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`.
Run Code Online (Sandbox Code Playgroud)

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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

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

San*_*pta 23

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

if (!Element.prototype.matches) {
  Element.prototype.matches = Element.prototype.msMatchesSelector;
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*xon 12

对于使用Angular 6和7(打字稿)的用户,应使用以下命令修改Sanjay Gupta的答案:

if (!Element.prototype.matches) {
  Element.prototype.matches = (<any>Element.prototype).msMatchesSelector ||
    Element.prototype.webkitMatchesSelector;
}
Run Code Online (Sandbox Code Playgroud)

强制转换(实际上是取消类型化)允许编译器解析未定义的方法。

  • 附加信息:此代码片段(值得称赞)似乎基于 https://developer.mozilla.org/en-US/docs/Web/API/Element/matches。 (2认同)

Der*_*own 7

看起来IE matches使用非标准名称()实现该功能.该链接包括一个polyfill,它将定义该matches函数,以便可以在IE上使用.