【发布时间】:2019-09-05 13:02:13
【问题描述】:
我一直在探索通过使用 chrome 扩展将一个或多个模板的 web 组件注入互联网上的任何网页的可能性。然而,stenciljs 的延迟加载功能在我的情况下已成为一个障碍。
在第一步中,我加载了核心文件,即 component.core.js 和 component.js 以及我的组件的入口文件,通过在 manifest.json 中列出它们(在 web_accessible_resources 数组中)
manifest.json
"web_accessible_resources": [
"js/web-component.js",
"js/web-components/web-components.core.js",
"js/web-components/my-component.entry.js",]
然后将它们作为脚本元素附加到网页中。这很好用。
当我将我的一个组件添加到 DOM 时,问题就出现了,Stencil 尝试从资源文件夹中延迟加载 component.entry.js 文件,我必须从 stencil.config.ts 或作为数据提供其路径 - DOM 中 component.core.js 的 script 标签的 resources-url 属性。
现在我不确定如何为 stencil 提供位于扩展中的组件资源的正确路径?
【问题讨论】:
-
您可以尝试使用 chrome 扩展协议和扩展 ID 从扩展中访问脚本。我不确切知道协议,但它应该看起来像 chrome-extension://[your extension id]/component.entry.js
-
我怀疑在外国毫无戒心的页面中加载您的自定义组件是一个好主意。我认为最好将整个 UI 放在一个 iframe 中,该 iframe 指向通过 web_accessible_resources 声明的扩展中的 html 文件。在该 html 文件中,您的 stensiljs 内容应该能够正常工作而无需任何额外的调整,因为那将是一个单独的文档环境。
标签: javascript google-chrome-extension web-component shadow-dom stenciljs