IE11中的Web Worker onMessage为空

时间:2018-12-15 18:32:39

标签: javascript reactjs typescript ecmascript-6 internet-explorer-11

我在我的应用程序的IE11中收到错误Promise is Undefined。当我在代码中使用Worker时

    const worker = new Worker('./worker.ts')
console.log('worker' , worker);

当我检查chrome和IE 11中的日志时,chrome将worker的onMessage作为函数返回,其中IE 11返回null,我也看到消息“权限被拒绝”。 我也在IE 11 Promise中未定义此错误。

我已经在文件的开头导入了导入“ babel-polyfill”。 除该工作人员外,其他所有承诺都工作正常。

任何人都可以帮助我解决此问题。

2 个答案:

答案 0 :(得分:1)

反应可能无法立即与IE兼容,

摘自官方文档:

React支持所有流行的浏览器,包括Internet Explorer 9及更高版本,尽管IE 9和IE 10等较旧的浏览器需要某些填充。

  

我们不支持不支持ES5方法的旧版浏览器,但是   如果使用polyfill,您可能会发现您的应用程序可以在旧版浏览器中运行   页面中包含诸如es5-shim和es5-sham之类的内容。你在你的   如果您选择走这条路,那就拥有它。


要使您的应用程序在IE(11或9)上运行,您将必须安装React-app-polyfill:

https://www.npmjs.com/package/react-app-polyfill

功能:

每个polyfill确保存在以下语言功能:

Promise (for async / await support)
window.fetch (a Promise-based way to make web requests in the browser)
Object.assign (a helper required for Object Spread, i.e. { ...a, ...b })
Symbol (a built-in object used by for...of syntax and friends)
Array.from (a built-in static method used by array spread, i.e. [...arr])

用法

首先,使用Yarn或npm安装软件包:

npm install react-app-polyfill

现在,您可以导入要支持的最低版本的入口点。例如,如果导入IE9入口点,则其中将包括IE10和IE11支持。

Internet Explorer 9

// This must be the first line in src/index.js
import 'react-app-polyfill/ie9';

// ...

Internet Explorer 11

// This must be the first line in src/index.js
import 'react-app-polyfill/ie11';

// ...

您还可以使用以下文档将清单配置为处理不同的浏览器:https://github.com/browserslist/browserslist

示例:

"browserslist": [
    ">0.2%",
    "not dead",
    "ie >= 9"
]

答案 1 :(得分:0)

通过在worker.ts顶部添加导入“ babel-polyfill”来解决此问题。

注意:我已经在index.js中导入了babel-polyfill。但是对于工人,我不得不再次添加它。