2

ソーシャル ネットワークでの音楽再生の状態を切り替える拡張機能を作成したいと考えています。popup.html に「再生/一時停止」ボタンがあり、各ページにスクリプト (injected.js、コンテンツ スクリプト) を挿入しました。誰かが popup.html の「再生/一時停止」をクリックすると、ソーシャル ネットワークのページは headPlayPause() 関数を呼び出さなければなりませんが、機能しません。修正するにはどうすればよいですか?

popup.html:

<script src = 'popup.js'></script>
<input type = 'button' value = "Play/Pause" id = 'stopper' />

popup.js:

window.onload = function() {
    document.getElementById('stopper').onclick = function() {
        // i don't know how correctly get tabId
        chrome.tabs.sendMessage(241, { greeting: "hello" },
            function(res) {
                // returns "sendMessage callback.. undefined"
                alert('callback of sendMessage: ' + res)
            });
    }
}

インジェクション.js:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
        headPlayPause();
    } 
);

私の英語でごめんなさい:)

4

1 に答える 1

3

現在のタブ ID を取得するために使用します。chrome.tabs.query({active:true, currentWindow: true}, callback);

document.getElementById('stopper').onclick = function() {
    chrome.tabs.query({
        active: true,
        currentWindow: true
    }, function(tabs) {
        var tabId = tabs[0].id; // A window has only one active tab..
        chrome.tabs.sendMessage(tabId, { greeting: "hello" },
            function(res) {
                alert('callback of sendMessage: ' + res);
            }
        });
    });
};

適切な応答を得るには、3 番目のパラメーター ( sendResponse)を呼び出す必要があります。

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
        // Send a response back. For example, the document's title:
        sendResponse(document.title);
    } 
);

拡張機能内でメッセージを送信する方法については、メッセージ パッシングチュートリアルを参照してください。

于 2013-03-19T20:30:43.187 に答える