我想创建应该在 ie11 上运行的 Web 组件。我正在用 gulp(和 gulp-babel,包括 babel 7)编译 js。
到目前为止,当我使用 Babel 编译时,它可以在 Chrome 中运行,但在 ie11: 中发送错误Function.prototype.toString: 'this' is not a Function object
。
在 gulpfile.js 我有这个:
.pipe(babel({
"presets": [
["@babel/preset-env", {
"targets": {
"browsers": [
"Chrome >= 52",
"FireFox >= 44",
"Safari >= 7",
"Explorer 11",
"last 4 Edge versions"
]
}
}]
]
}))
在js中我有这样的东西(我在网上找到的用于测试的示例代码):
class MyCustomTag extends HTMLElement {
connectedCallback() {
this.innerHTML = '<h2>My custom element</h2><button>click me</button>';
this.style.backgroundColor = 'blue';
this.style.padding = '20 px';
this.style.display = 'inline-block';
this.style.color = 'white';
}
}
try {
customElements.define('my-custom-tag', MyCustomTag)
} catch (err) {
const h3 = document.createElement('h3')
h3.innerHTML = "This site uses webcomponents which don't work in all browsers! Try this site in a browser that supports them!"
document.body.appendChild(h3)
}
当然,我<my-custom-tag></my-custom-tag>
在 HTML 中添加了。
当代码中有“扩展 HTMLElement”时,Babel 生成的东西会引发错误(如果我没记错的话,Babel 会生成类似“_.isNative”的东西,它使用 Function.prototype.Tostring - 抱歉,我目前在另一台计算机上)我确定我错过了一些愚蠢的东西,但我找不到关于这个错误的任何答案。我尝试添加@babel/plugin-transform-classes、babel-plugin-transform-builtin-classes,但没有任何效果,它让我发疯。
任何想法?