2011-07-17 100 views
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}); 
}); 
+0

你能展示一些代码 – serg

+0

@serg:这是相同的代码,你让我用鼠标器标记。然而,它发布在问题(编辑) – user782400

回答

1

这是因为当前窗口焦点窗口是在Chrome API两回事。通过nullchrome.tabs.captureVisibleTab()需要当前窗口,弹出窗口意味着一个背景窗口。正如它在docs中所述:

当前窗口是包含当前正在执行的代码的窗口。认识到这一点很重要,它可能与最顶层或关注的窗口不同。

要发送,我们需要明确指定其请求窗口的截图:

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

如果弹出窗口是不活动(如图所示),你不能这样做后台页面内任何事情。假设你正在追踪这个事实。

确保您的鼠标点击在该弹出窗口DOM内。所以在你的弹出窗口中,做听众。

相关问题