これは、孤立した世界と呼ばれる Chrome 拡張機能の既知の機能です。コンテンツ スクリプトはターゲット ページに挿入され、拡張機能の他の部分から直接アクセスすることはできません。対話するには、messagingを使用する必要があります。
これは、全体像を把握するのに役立つ関連する質問に対する少し古いSOの回答です。答えでは、最初のものを優先して削除されたsendMessage
の代わりにコードを調整する必要があります。sendRequest
たとえば、バックグラウンド ページに次の呼び出しを配置します (ドキュメントから抜粋)。
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, // you can send "DoSomething" for example
function(response) {
console.log(response.farewell);
});
});
コンテンツ スクリプトでは、次のメッセージを聞く必要があります。
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if(request.greeting == "hello")
sendResponse({farewell: "goodbye"});
// else if(request.greeting == "DoSomething") DoSomething();
});
getViews
コンテンツ スクリプトが挿入されたページではなく、拡張ページ (背景、ポップアップ、オプション) を返すため、メソッドは必要なものではないと思います。sendMessage
コンテンツ スクリプトからバックグラウンド ページに移動して、後ですべてのスクリプト ホスト ページを「認識」するか、executeScript
.
chrome.tabs.executeScript(tabId, {code: 'DOsomething();'})