私のpopup.jsが現在のページのコンテンツスクリプトからメッセージを受け取り、配列を作成するChrome拡張機能を開発しています。次に、ボタンを押すと、popup.jsは新しいタブ(コンテンツスクリプトが実行中)を作成し、そのコンテンツスクリプトに配列を含むメッセージを送信します。Chrome拡張機能で新しいタブを作成し、popup.jsから新しいタブのコンテンツスクリプトにメッセージを送信
マイpopup.js:
//this message is sent from a different content script (for current page), not shown here
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action === "getSource") {
var arr = JSON.parse(request.source);
//create new tab
chrome.tabs.create({url: "newtab.html"}, function(tab){
//send message to new tab
chrome.tabs.sendMessage(tab.id{
action: "getDataArray",
source: JSON.stringify(arr)
});
}
});
NEWTAB-contentscript.js:
$(document).ready(function() {
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action === "getDataArray") {
$("#result").html(JSON.parse(request.source));
}
});
がnewtab.html:
<script src="newtab-contentscript.js"></script>
問題:NEWTAB-contentscript.jsは思われませんメッセージを受信する。
タブの作成やメッセージの送信方法に間違いがありますか?この問題を解決する方法はありますか?
私は多分、 '$(拡張プラットフォームのソースコードを掘り下げていない)と思います(document).ready'が 'chrome.tabs.sendMessage'からのメッセージを受け取るには遅すぎます。 しかし、私はメッセージロジックをバックグラウンド(イベント)ページに移動し、newtab-contentscript.jsからのメッセージの受け渡しを開始するのは良い方法です。この方法で、メッセージの送信をいつ開始するかを制御できます。 –
ええ、それは基本的に答えです。タイミングの問題は、コールバック内の 'console.log'のタイムスタンプと、新しいタブのコンテンツスクリプトの最初の行とを比較することで確認できます。 – wOxxOm
入力いただきありがとうございます! @HaibaraAiあなたの提案を詳しく教えていただけますか?あなたはpopup.jsに送るのではなく、私のバックグラウンドページから新しいタブを作成することを提案していますか?私はこれを試みましたが、タブを作成するなどのクロム機能はバックグラウンドスクリプトでは利用できません。 – lava200