0

私が理解したように、ページアクションとコテントスクリプトの間で直接通信する方法はないので、私はそれを行います:

page_action.html: _

chrome.extension.sendRequest(
    {to:"background",key:"color",val:"red"},
    function(response) {
        console.log(response) ;
    }
) ;

background.js

chrome.extension.onRequest.addListener(
    function(request,sender,sendResponse) {
        if (request.to == "background") {
            console.log("Request recieved to Background") ;
            request.to = "content" ;
            chrome.extension.sendRequest(request,function(response) {
                sendResponse(response) ;
            }) ;
        }
    }
) ;

content.js

(function(){
    // ...
    // Do something initial
    // ...
    // Now start to listen
    chrome.extension.onRequest.addListener(
        function(request,sender,sendResponse) {
            if (request.to == "content") {
                // Do something with request.key and request.val
                console.log("Request recieved to Content Script") ;
                sendResponse({status:'from content'}) ;
            }
        }
    ) ;
}()) ;

ページアクションとバックグラウンド間の通信は完全に機能しますが、バックグラウンドとコンテンツスクリプトの間では何も起こりません。ここで何が欠けていますか?お互いを正しくコミュニケーションする方法は?そして何よりも、ページアクションからコンテンツスクリプトへのより直接的なコミュニケーションを可能にする別の方法はありますか?

4

1 に答える 1

5

Page Action幸いなことに、aとaの間で直接通信する方法Content Scriptがあり、それはtabs.sendMessageメソッドを介して行われます。

idから、chrome.pageAction.onClickedまたは単純なから取得できますchrome.tabs.query

メッセージを送信するタブのIDを取得したら、次のPage Actionようにメッセージを送信します。

page_action.html

chrome.tabs.query({active:true,currentWindow:true},function(tabs){
  chrome.tabs.sendMessage(tabs[0].id,{message:"text"}, function(response){
    //If you need a response, do stuff with it here
  });
});

content.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
  //Do stuff here
  //sendResponse({message:"stuff"});
});

ちなみに、sendRequest対応するものonRequestに置き換えられましたMessage

于 2013-02-28T03:28:17.617 に答える