简而言之,当在屏幕的浏览器部分单击任何东西时,我会尝试使扩展本身重新加载。我发现了Capturing all the click event这给了我
window.onclick =函数(E){ alert(e.target);};
但这只会在扩展内单击某些内容时抛出警报。有没有一种方法可以检测到扩展本身外部的点击并重新加载扩展?
发布于 2017-05-17 00:18:16
不经意间,我会说你只能从打开的单个选项卡中获得点击。因此,您将错过地址栏和浏览器选项卡区之外的任何其他部分。
以下是如何捕获所有选项卡上的点击。注意:将代码放在你的背景页面中。
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();
}
}
https://stackoverflow.com/questions/44005110
复制相似问题