Я создал собственный элемент Polymer и попытался использовать его в своем расширении Chrome. Однако я столкнулся с следующей проблемой.Полимерный элемент в скрипте расширения расширения Chrome
Я не могу получить доступ к API моего элемента из сценария содержимого. Вот что я имею в виду.
шаблон моего-элемента
<link rel="import" href="../polymer/polymer.html">
<dom-module id="my-element">
<template>
... some html...
</template>
<script src="js/my-element.js"></script>
</dom-module>
в моих-element.js
Polymer({
is: 'my-element',
init: function() {
console.log('init');
}
});
в content.js
var link = document.createElement('link');
link.setAttribute('rel', 'import');
link.setAttribute('href', chrome.extension.getURL('my-element.html'));
link.onload = function() {
var elem = document.createElement('my-element');
document.body.appendChild(elem);
elem.init(); // Error: undefined is not a function
};
document.body.appendChild(link);
Что интересно это то, что я могу видеть, что my-element
является правильно отображаемый на странице, со всем теневым домом и вещами. И если я запустил document.querySelector('my-element').init()
в консоли веб-страницы хоста, он будет выполнен без ошибок. Однако выполнение одного и того же кода внутри скрипта содержимого приводит к ошибке.
Я попробовал, чтобы включить сам Полимер в качестве сценария контента. Я столкнулся с проблемой registerElement
, но я решил решить ее из-за вопроса this. В этом случае у меня есть window.Polymer
, определенный в моем content.js
. API-интерфейс My-element становится полностью доступным, но теперь теневое dom не отображается, когда я добавляю его в DOM веб-страницы хоста.
Я не думаю, что браузер следует за ссылками chrome-extension: // 'на обычной странице http/https из-за песочницы, по крайней мере такие ссылки не работают здесь, как есть. Вы выставили 'my-element.html' через [web_accessible_resources] (https://developer.chrome.com/extensions/manifest/web_accessible_resources) в манифесте? – wOxxOm
Да, я выставил 'my-element.html' и все связанные файлы css в моем манифесте. Элемент фактически визуализируется, и его методы и свойства, объявленные с помощью «Полимер ({...})', доступны с помощью document.querySelector() ', но только с веб-страницы хоста, а не из сценария содержимого. Я думаю, что я должен как-то настоятельно объявить «my-element» из контекстного скрипта, но я понятия не имею, как это сделать. – optimistiks