Polymer 使用HTML导入来自JS的相对路径资源

Polymer 使用HTML导入来自JS的相对路径资源,polymer,web-component,Polymer,Web Component,我有一个(聚合物)网络组件,我想让人们以跨来源资源共享(CORS)的方式访问它。这很好,但我不确定如何从组件内的JS代码中为图像和JSON文件等资源提供相对路径。它们被解释为相对于包含页面,而不是相对于HTML导入。我想我需要的是一个JS变量,它给出导入的html文件的路径。相对路径很重要,因为我还希望人们能够轻松地将其部署到自己的站点,而不是依赖到资源副本的硬编码路径 例如,您在example.com上加载index.html,它具有: <link rel="import" href="

我有一个(聚合物)网络组件,我想让人们以跨来源资源共享(CORS)的方式访问它。这很好,但我不确定如何从组件内的JS代码中为图像和JSON文件等资源提供相对路径。它们被解释为相对于包含页面,而不是相对于HTML导入。我想我需要的是一个JS变量,它给出导入的html文件的路径。相对路径很重要,因为我还希望人们能够轻松地将其部署到自己的站点,而不是依赖到资源副本的硬编码路径

例如,您在example.com上加载index.html,它具有:

<link rel="import" href="//my-site.com/components/my-component/my-component.html">

<my-component> ... </my-component>

... 
现在,在
my component.html
中,我有一些JS,它们根据用户的配置文件加载一些资源—i18next.JS的图像和JSON语言文件。问题是,除非我将它们指定为
my site.com
的绝对路径(我不想这样做),否则它们将被解释为相对于
example.com/index.html
上的页面,而不是相对于
my component.html
的路径


我在模板中静态指定的任何图像都可以正常工作并正确加载,因为它是相对于HTML导入路径的。我只是不确定如何对从JS加载的资源执行此操作,因为它们将与包含的页面(example.com/index.html)相关。是否存在公开此导入路径的属性或函数?谢谢。

我发现您可以使用
document.currentScript.baseURI
从导入中的脚本中访问导入的URL。我在做这样的事情:

<script>
    (function () {
        var srcURL = new window.URL(document.currentScript.baseURI);
        var baseURL = srcURL.origin + srcURL.pathname.substr(0, srcURL.pathname.lastIndexOf("/") + 1);

        // can use baseURL here to load resources
        Polymer({...});
    })();
</script>

(功能(){
var srcURL=newwindow.URL(document.currentScript.baseURI);
var baseURL=srcURL.origin+srcURL.pathname.substr(0,srcURL.pathname.lastIndexOf(“/”)+1);
//可以在此处使用baseURL加载资源
聚合物({…});
})();

一个问题:当我硫化所有内容时,上面的代码不起作用,因为路径发生了变化。稍后我将对此进行研究。

要创建相对路径,可以使用聚合元素的
resolvePath
方法

例如:
this.resolvePath('x-foo.png')


更新:
resolvePath
替换为
resolveUrl
for

可能值得一看这个问题re:suverize和assetPath()聚合物2不存在硫化,所以您可能会幸运。谢谢,这正是我要找的。我读过那份文件,或者我是这么想的,但我一定是错过了。别担心,文件中有很多东西很容易被忽略:)@robdodson你能不能,请在“?”中提供一个例子。