2015-03-13 8 views
2

У меня есть (Полимер) веб-компонент, который я хочу сделать доступным для людей в режиме совместного использования ресурсов (CORS). Это прекрасно работает, но я не уверен, как я могу дать относительный путь для ресурсов, таких как изображения и файлы JSON, из JS-кода внутри этого компонента. Они интерпретируются как относительные к содержащейся странице, а не по отношению к импорту HTML. Что я думаю Я хочу переменная JS, которая дает путь к содержащемуся html-файлу, который был импортирован. Относительный путь важен, потому что я также хочу, чтобы люди могли легко развернуть это на своем собственном сайте и не полагаться на жесткий путь к моей копии ресурса.Ресурсы относительного пути от JS с помощью импорта HTML

Например, при загрузке index.html на example.com и имеет:

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

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

Теперь внутри my-component.html, у меня есть некоторые JS, который загружает некоторые ресурсы на основе профиля пользователя - изображения и файлы в формате JSON языка для i18next.js. Проблема заключается в том, что если я не определить их как абсолютный путь к my-site.com, что я не хочу делать, они будут интерпретироваться как относительно страницы в example.com/index.html, а не по отношению к пути my-component.html

любые изображения, Я задаю статически в моей работе шаблона и загружаю его правильно, потому что он относится к пути импорта HTML. Я просто не знаю, как это сделать для ресурсов, загруженных из JS, потому что они будут относиться к содержательной странице (example.com/index.html). Есть ли какой-либо атрибут или функция, которая предоставляет этот путь импорта? Благодарю.

ответ

6

Для создания относительных путей вы можете использовать метод resolvePath вашего полимерного элемента. Here's the docs on it

например: this.resolvePath('x-foo.png')

Update: resolvePath заменяется resolveUrl для Polymer 1.0

+0

Спасибо, это именно то, что я искал. Я прочитал этот документ или так думал, но, должно быть, я пропустил это. –

+0

Не стоит беспокоиться, в документах есть много вещей, поэтому их легко упускать из виду :) – robdodson

+0

@robdodson Не могли бы вы привести пример в [Полимерные документы] (https://www.polymer-project.org/0.5 /docs/polymer/polymer.html#resolvepath)? – DoK

1

Я узнал, что вы можете получить доступ к URL-адресу импорта изнутри скрипта внутри него с помощью document.currentScript.baseURI. Я делаю что-то вроде этого:

<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> 

Одна проблема: приведенный выше код не работает, когда я вулканизацию все потому, что пути меняются. Я займусь этим немного позже.

+0

Это может быть стоит посмотреть на этот вопрос повторно: вулканизацию и assetPath (https://github.com/Polymer/ вулканизация/проблемы/51) – robdodson

+0

Вулканизация исчезла с помощью Polymer 2, так что вам повезло. – codeMonkey