Я разрабатываю расширение chrome с использованием Polymer в течение некоторого времени, и у меня есть пара проблем, связанных с выпуском его в текущее состояние. Я хотел бы услышать о некоторых стратегиях предотвращения следующих проблем, с которыми я столкнулся:
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
(которое является Polymer), как таковое:
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