3

私の全体的な目標は、次を使用してバックグラウンドページからスクリーンショットを撮ることでした:

http://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab

それをコンテンツ スクリプトに渡すと、ページの HTML DOM を使用してスクリーンショットを分析し、好きなように切り取ることができます。

ただし、メッセージ パッシングを使用して dataUrl をコンテンツ スクリプトに戻すことができないようです。

http://developer.chrome.com/extensions/messaging.html

JSON.stringify() を試しましたが、役に立ちませんでした。

これは完全にうまくいきます:

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        sendResponse({imgSrc:'hello'});
    }
);

コードをこれに切り替えても、何も通過しません:

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        chrome.tabs.captureVisibleTab(
            null,
            {},
            function(dataUrl)
            {
                sendResponse({imgSrc:dataUrl});
            }
        )
    }
);

背景ページが実際にスクリーンショットを撮っているという私の唯一の証拠は、私ができることです

chrome.tabs.captureVisibleTab(null,{},function(dataUrl){console.log(dataUrl);});

そして私は見る

"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAA....etc..."

有効な background.html にログイン

私の質問は、この URL をコンテンツ スクリプトに送信するにはどうすればよいですか?

実際に表示されているページで何も制御できないバックグラウンド ページですべてのロジックを実行したくありません。

4

1 に答える 1

7

イベントリスナーではなく、chrome.tabs.sendMessage必ず使用してくださいreturn true

背景ページ:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        chrome.tabs.captureVisibleTab(
            null,
            {},
            function(dataUrl)
            {
                sendResponse({imgSrc:dataUrl});
            }
        );

        return true;
    }
);

コンテンツスクリプト

chrome.runtime.sendMessage({msg: "capture"}, function(response) {
  console.log(response.dataUrl);
});
于 2013-09-13T21:33:09.437 に答える