バブリング イベントをディスパッチし、event.target
プロパティを使用してノードの参照を取得できます。
// content script
var myEventName = 'whatever' + Math.random(); // Unpredictable, avoid conflicts
document.addEventListener(myEventName, function(event) {
event.stopPropagation(); // No need to bubble further
var element = event.target;
// ... rest of your code
}, true); // <-- Get event at capture phase
// Inject the injected script
var script = document.createElement('script');
script.textContent = '(' + function(myEventName) {
function sendElementToContentScript(element) {
var event = new CustomEvent(myEventName, { bubbles: true });
element.dispatchEvent(event);
}
// ... rest of your code, e.g. sendElementToContentScript(document.body);
} + ')("' + myEventName + '");';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
イベントで追加情報を渡したい場合は、event.detail
プロパティを設定します。
// set
var event = new CustomEvent(myEventName, {
bubbles: true,
detail: 'any serializable type'
});
// read (in event listener
console.log( event.detail );
詳細については、CustomEvent
(MDN) および「 Chrome 拡張機能の構築 - コンテンツ スクリプトを使用してページにコードを挿入する」 (スクリプト インジェクション手法に慣れていない人向け) を参照してください。