从远程URL导入Polymer Web组件

时间:2017-09-16 21:54:26

标签: polymer polymer-2.x

我创建了一个基于Polymer 2.0的自定义Web组件,旨在安装在第三方网站上,以显示从我的网站管理的内容。

有问题的网络组件取决于其他3个自定义网络组件,还取决于 iron-ajax 铁下拉铁图标 iron-icon-svg 标记元素纸张图标按钮

为了最大限度地提高浏览器兼容性,我们使用 polymer-build 和默认的 es5-bundled 预设将代码转换为ES5。

完成后,构建文件夹部署在Firebase托管上,我得到一个URL,用于在第三方网站上包含所需文件:

<script>if (!window.customElements) {
        document.write('<!--');
    }</script>
    <script type="text/javascript" src="https://cdn.mydomain.com/libs/webcomponentsjs/custom-elements-es5-adapter.js"></script>
    <!--! do not remove -->
    <script src="https://cdn.mydomain.com/libs/webcomponentsjs/webcomponents-loader.js"></script>
    <link rel="import" href="https://cdn.mydomain.com/components/my-component.html">

当我在空白页面中添加上一段代码时,我可以毫无问题地创建 my-component 的新实例,并且所有内容都按预期工作。

但是,当我将上面的代码包含在已经使用Polymer的网页中时,我会收到很多类似于以下内容的错误:

  

未捕获的DOMException:无法执行'define'   'CustomElementRegistry':此名称已经与此一起使用   注册表

这是可以理解的,因为导入上面嵌入了聚合物,但聚合物已经加载到页面上。

我正在考虑从我的自定义Web组件定义中排除Polymer和依赖项,例如 iron-ajax 等。这样,我可以直接在已嵌入Polymer的页面上使用Web组件,而不使用Polymer导入Polymer和所需依赖项的页面。

不幸的是,当我尝试过时,我无法生成通常由 polymer-build 自动创建的babel助手。此外,即使我成功获得了babel助手,那么这个解决方案并不总是有效,因为必须将所有相关代码转换为ES5。这意味着使用ES6版本的Polymer的第三方网页仍然无法使用我的自定义Web组件......

此时我唯一可以解决的问题是在私有存储库中发布我的自定义Web组件,并将源代码分发给需要在已嵌入Polymer的第三方网页中包含我的自定义Web组件的开发人员。这样,他们可以在本地导入组件定义并将其包含在构建中。不幸的是,该解决方案的主要缺点是阻止了我方的透明更新。我需要通知开发人员有关更改的信息,或者他们需要轮询更改:(

您是否已经遇到过聚合物的这种情况?你有什么建议吗?

0 个答案:

没有答案