【发布时间】:2016-03-21 16:55:15
【问题描述】:
我开发的 chrome 扩展通过 HTML 导入将 Polymer 和其他 Web 组件注入到主机页面中,而不是使用内容脚本的典型方法 - 它自动在 isolated world 中运行。
这背后的原因与两件事有关:
- Chrome 扩展无法注册来自content scripts 的自定义元素
- chrome 扩展清单不支持在隔离环境中运行的 HTML 导入,仅支持 javascript
由于这些限制,我不得不将我的组件加载到主机页面的<head> 中作为described here。
我面临的明显问题是我的 javascript [在某些网站上] 与主机页面的 javascript 发生冲突,因为我用来注入我的依赖项的方法不在“孤立的世界”中运行。
到目前为止,我已经通过 gulp 任务重命名 Polymer 和我的组件以避免冲突解决了大部分问题,但不幸的是,它并不完美,需要更强大的方法。
最后是我的问题:是否可以为我的 javascript 创建一个“孤立的世界”?也许是另一个文档对象?如果没有,我可以采用什么策略来确保我的代码独立运行?
更新:
你们中的一些人建议使用我迄今为止一直在使用的 IIFE。我正在寻找一个孤立世界的答案,类似于 google chrome 如何在其下运行扩展。这主要是因为 Polymer 必须附加到全局窗口对象。
【问题讨论】:
-
您指的是哪些冲突?只是变量名/函数冲突或更复杂的冲突?
-
变量/函数名冲突。如果主机页面使用它自己的 Polymer 版本,则尤其如此。
-
你不能使用页面上的聚合物吗?检查它是否已经存在,如果没有注入你的?
-
该页面可能有不同版本的 Polymer,它们的工作方式完全不同。
-
看起来很难,也许这有用:github.com/asvd/jailed
标签: javascript google-chrome google-chrome-extension polymer