Я разрабатываю расширение хрома с использованием Polymer в течение некоторого времени, и у меня есть пара проблем, связанных с его выпуском в текущем состоянии. Я хотел бы услышать о некоторых стратегиях предотвращения следующих проблем, с которыми я столкнулся:Проблемы с загрузкой Polymer 1.0 в расширении хрома
1) Загрузка Полимер в страницу просачивается в глобальное пространство имен. Полимер не поставляется в JS-файлах, скорее, он представлен в виде html-страницы и требует, чтобы пользователь использовал импорт HTML для загрузки его на страницу. AFAIK, скрипты контента допускают только CSS и JS, но не HTML. Чтобы решить эту проблему, я включаю его динамически генерировать ссылку элемент и добавление его в качестве такового на страницу:
function loadUrl(url) {
return new Promise(
function(resolve, reject) {
var link = document.createElement('link');
link.setAttribute('rel', 'import');
link.setAttribute('href', url);
link.onload = function() {
resolve(url);
};
document.head.appendChild(link);
});
}
loadUrl(chrome.extension.getURL("polymer/polymer.html")).
then(loadUrl(chrome.extension.getURL("my/component.html")))
После загрузки на страницу хозяина, он не работает в изоляции, как скрипты контента и может вызывает конфликты пространства имен, если страница уже загружена Полимер.
2) Полимер не сообщает вам, когда он загружен и готов к использованию. Полимер не (в настоящее время) не запускает событие, когда оно загружено, и в результате мои компоненты иногда загружаются до того, как Polymer сделает и сломается.
Чтобы смягчить это, я запуская пользовательское событие в конце polymer-micro.html
(что, где полимер) определяется как таковые:
var ev = new CustomEvent('polymer-loaded');
document.dispatchEvent(ev);
3) Инструмент POLYBUILD не создает правильный код для хром удлинение. Как бы он ни был полезен, он генерирует отдельный файл javascript внеdom-module
, вызывая пространство имен leak
в глобальный объект окна. Например, если был импортирован jQuery в мой модуль, Polybuild создавал бы JS-файл, содержащий jQuery вне модуля DOM, заставляя его прикрепляться к объекту окна хоста - большой нет-нет в расширении chrome.
Спасибо за отзыв.
На момент написания этого я использую Polymer 1.2.3
Я действительно ответил на вопрос (2) правильно, поэтому я не ожидаю, что мой ответ будет принят, но я попытаюсь обновить его после экспериментальных экспериментов с использованием хромовых расширений на основе полимера и модулей и импорта es6, до тех пор надеюсь, что это поможет вам хотя бы немного. –