首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Chrome扩展:检测chrome扩展之外的点击

Chrome扩展:检测chrome扩展之外的点击
EN

Stack Overflow用户
提问于 2017-05-16 23:03:50
回答 1查看 1.3K关注 0票数 0

简而言之,当在屏幕的浏览器部分单击任何东西时,我会尝试使扩展本身重新加载。我发现了Capturing all the click event这给了我

window.onclick =函数(E){ alert(e.target);};

但这只会在扩展内单击某些内容时抛出警报。有没有一种方法可以检测到扩展本身外部的点击并重新加载扩展?

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 00:18:16

不经意间,我会说你只能从打开的单个选项卡中获得点击。因此,您将错过地址栏和浏览器选项卡区之外的任何其他部分。

以下是如何捕获所有选项卡上的点击。注意:将代码放在你的背景页面中。

代码语言:javascript
运行
复制
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应该执行重新加载扩展的工作。

最终的代码,全部放在你的背景页面中,看起来像这样:

代码语言:javascript
运行
复制
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();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44005110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档