0

我这里有点问题。根据我之前提出的问题,我开发了一个扩展程序,可以记录鼠标点击并标记该位置。

但是,当我单击链接打开弹出窗口时;标记的鼠标单击是在背景窗口上,而不是在弹出窗口上。

这是安全问题还是什么?

背景.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 中是两个不同的东西。传递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 回答