0

ここで少し問題があります。以前の質問に基づいて、マウスクリックを記録して場所をマークする拡張機能を開発しました。

ただし、リンクをクリックしてポップアップを開くと、マークされているマウス クリックは、ポップアップではなくバックグラウンド ウィンドウで行われます。

これはセキュリティの問題ですか?

background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    chrome.tabs.captureVisibleTab(null, {format:"png"}, function(dataUrl){

    var img = new Image();
    img.onload = function(){
        var canvas = document.getElementById("canvas");
        canvas.width = img.width;
        canvas.height = img.height;

        var ctx = canvas.getContext("2d");

        ctx.drawImage(img, 0, 0);
        ctx.arc(request.x, request.y, 5, 0, Math.PI*2, true);
        ctx.fillStyle = "rgb(255,0,0)";
        ctx.fill();

        chrome.tabs.create({url: canvas.toDataURL("image/png")});
    };
    img.src = dataUrl;

});
sendResponse({});
});
<body>
    <canvas id="canvas"></canvas>
</body>

content_script.js :

window.addEventListener("click", function(event) {
    chrome.extension.sendRequest({x: event.x, y: event.y});
});
4

2 に答える 2

1

これは、Chrome API では現在のウィンドウフォーカスされたウィンドウが 2 つの異なるものであるために発生します。に渡すnullと、現在のウィンドウchrome.tabs.captureVisibleTab()が使用されます。これは、ポップアップの場合はバックグラウンド ウィンドウを意味します。ドキュメントで言うように:

現在のウィンドウは、現在実行中のコードを含むウィンドウです。これは、最上位またはフォーカスされたウィンドウとは異なる可能性があることを認識することが重要です。

リクエストを送信したウィンドウのスクリーンショットを作成するには、明示的に指定する必要があります。

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    chrome.tabs.captureVisibleTab(sender.tab.windowId, {format:"png"}, function(dataUrl){
        ...
    });
});
于 2011-07-17T15:48:15.830 に答える
0

ポップアップ ウィンドウがアクティブでない場合 (表示されている場合)、バックグラウンド ページ内では何もできません。あなたがその事実に従っていると仮定します。

マウス クリックがそのポップアップ ウィンドウ DOM 内にあることを確認してください。したがって、ポップアップ ウィンドウ内でリスナーを実行します。

于 2011-07-17T11:48:20.323 に答える