简而言之,我试图在屏幕的浏览器部分点击任何内容时重新加载扩展。我找到了,Capturing all the <a> click event,它给了我
window.onclick = function(e){alert(e.target);};
但是如果在扩展程序中单击了某些内容,则只会发出警报。有没有办法检测扩展本身外的点击并重新加载扩展名?
答案 0 :(得分:0)
在我的头顶,我会说你只能从打开的各个标签获得点击。因此,您将错过URL栏以及标签区域外的浏览器的任何其他部分。
此处了解如何捕获所有标签上的点击次数。注意:将代码放在后台页面中。
chrome.tabs.query({}, function(tabs){
for(var i = 0; i < tabs.length; i++){
chrome.tabs.executeScript( tabs[i].id, {code:"window.onclick = function(e) { alert(e.target);};"},
function(){} );
}
});
chrome.tabs.onCreated.addListener(function(tab) {
chrome.tabs.executeScript( tab.id, {code:"window.onclick = function(e) { alert(e.target);};"},
function(){} );
});
chrome.tabs.onUpdated.addListener(function(tab) {
chrome.tabs.executeScript( tab.id, {code:"window.onclick = function(e) { alert(e.target);};"},
function(){} );
});
要通知您的扩展程序您的某个标签页上发生了点击,请使用chrome.runtime.sendMessage
- 您可以通过添加chrome.runtime.onMessage.addListener
来拦截后台页面中的此消息。收到消息后,您可以使用chrome.runtime.reload();
相反,当发生点击时调用alert()
,请使用chrome.runtime.sendMessage
,当您的后台页面收到消息时,chrome.runtime.reload
应该重新加载扩展程序。
最终代码全部放在您的后台页面中,如下所示:
chrome.tabs.query({}, function(tabs){
for(var i = 0; i < tabs.length; i++){
chrome.tabs.executeScript( tabs[i].id, {code:"window.onclick = function(e) { chrome.runtime.sendMessage({msgID: "click_event"});};"},
function(){} );
}
});
chrome.tabs.onCreated.addListener(function(tab) {
chrome.tabs.executeScript( tab.id, {code:"window.onclick = function(e) { chrome.runtime.sendMessage({msgID: "click_event"});};"},
function(){} );
});
chrome.tabs.onUpdated.addListener(function(tab) {
chrome.tabs.executeScript( tab.id, {code:"window.onclick = function(e) { chrome.runtime.sendMessage({msgID: "click_event"});};"},
function(){} );
});
chrome.runtime.onMessage.addListener(function(req, sender, resp){
if(req.msgID.indexOf("click_event") > -1)
{
chrome.runtime.reload();
}
}