在React中获取polyfill并不完全在IE 11中工作

时间:2016-12-13 16:27:22

标签: reactjs internet-explorer-11 fetch

此提取在Chrome中运行良好:

        fetch( this.props.url, {credentials:'same-origin'})
        .then( (data) => data.json() )
        .then( (data) => {  
          if( data.length > 0) {                
              // do some stuff
          } else {
              console.log('No data Richard of the Beard of the Lewis.');
          }
    }); 

我正在使用等距抓取,我正在使用promise-polyfill填充我的承诺。我正在使用webpack和babel来编译js。

当我在IE11中执行此代码时,数据的初始提取执行并且我的响应确实包含所请求的数据,但我的'then'中的任何内容似乎都没有执行(我在几个不同的地方应用了console.logs看完他们在完成取得之后是否抽搐......没有去)。我没有控制台错误,所以我认为IE11对编译的js语法很满意。

有人有线索让我试试吗?我是否需要以更冗长的方式重新编写我的fetch语句,以便IE11完全执行它?在这一点上任何事都有用!感谢您的任何意见。

4 个答案:

答案 0 :(得分:0)

查看isomorphic-fetch,该软件包只是导入导出whatwg-fetchnode-fetch的各种元数据包,具体取决于您是在浏览器还是在Node上下文中。< / p>

我认为您的问题是它默认会使用节点版本(请参阅main entry in the package.json)。

作为polyfill,它只是在非IE上跳过,因为浏览器默认支持fetch。在IE11上使用了polyfill,但它是Node polyfill,它不能在浏览器中运行。

您可以通过包含浏览器特定版本来强制webpack使用浏览器版本:

require('isomorphic-fetch/fetch-npm-browserify')

import 'isomorphic-fetch/fetch-npm-browserify'

或在Webpack配置中:

entry: [
    'isomorphic-fetch/fetch-npm-browserify',
    'app.js'
]

答案 1 :(得分:0)

所以这就是我最终使用的对我有用的东西:

require('es6-promise').polyfill();
require('fetch-everywhere');

我曾尝试过另外两个被称为神奇和多重填充的提取,但上面的组合最终允许我在代码中找到IE不兼容的REST。 :)

答案 2 :(得分:0)

您需要包括以下文件,以便fetch.js在 IE 11 +

中运行
  • './ node_modules / es6-promise / dist / es6-promise.auto.js'
  • “同构提取”

在运行 webpack 命令之前,必须确保已将这些文件安装在node_modules中,请运行以下命令:

  

npm install-保存同构提取es6-promise

然后将其放在webpack条目属性中:

  entry: [
    './node_modules/es6-promise/dist/es6-promise.auto.js',
    'isomorphic-fetch',
    'path for main file'
  ]

现在,在终端机/ cmd中键入 webpack 关键字,您应该在dist文件夹中找到一个文件(如果尚未指定其他输出路径),并且可以使用polyfill。

Here is the official github fetch.js polyfill page

答案 3 :(得分:0)

我们需要添加一个polyfill以便在IE中进行抓取,请参考适合您的https://github.com/github/fetch