我創建了一個自定義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的問題。在這種情況下,我在我的content.js
中定義了window.Polymer
。我的元素的API變得完全可訪問,但現在當我將它附加到主機網頁的DOM時,它不會被渲染。
我不認爲瀏覽器由於沙箱而在正常的http/https頁面上遵循'chrome-extension://'鏈接,至少這樣的鏈接在這裏不起作用。您是否在清單中通過[web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources)公開了'my-element.html'? – wOxxOm
是的,我在我的清單中暴露了'my-element.html'和所有相關的css文件。該元素實際上被渲染,它的方法和用'Polymer({...})聲明的屬性可以通過'document.querySelector()'訪問,但只能從主機網頁訪問,而不能從內容腳本訪問。我想我應該不知何故在內容腳本中聲明'my-element',但我不知道如何。 – optimistiks