内容脚本中的监听器

让我解释一下我的问题。 我目前正在开发一个Google Chrome扩展程序,它会在每个网页中将工具栏注入iframe。

问题是我在某些情况下需要隐藏工具栏,重新显示它和类似的东西。 Basicelly我想把我的听众放在我的背景页面上,但它没用,因为这个页面不能图形化地操纵对象。 所以我的计划是将这个监听器放在content_script上(谁能用图形方式操作对象)。 但第二个问题是与背景页面相反的内容脚本不会一直执行,而只会执行一次。

所以我问自己是否有可能让内容脚本听起来像一个背景页面,通过在它上面放一个循环或类似的东西……

提前致谢。

我试过这个:

的manifest.json

{ "background_page" : "background.html", "browser_action" : { "default_icon" : "images/extension.png" //"popup" : "activateToolbar.html" }, "content_scripts": [ { "all_frames": true, "css": ["css/yourtoolbar.css"], "js": ["js/jquery.js", "js/yourtoolbar.js", "js/listener.js"], "matches": ["http://*/*"], "run_at": "document_end" } ], "permissions" : ["tabs", "unlimitedStorage", "http://*/*", "notifications"], "name" : "YourToolbar", "version" : "1.1", "description" : "Make your own Toolbar" } 

toolbar.html

   

Tool.js

 function hideToolbar() { chrome.extension.sendRequest({action : "hideToolbar"}); window.webkitNotifications.createHTMLNotification('instantMessage.html', 'Ask Show Menu').show(); } 

listener.js

 chrome.extension.onRequest.addListener(function(request, sender, sendResponse){ if(request.action) { $('body').remove(); console.log('Received Start'); alert(request.action); console.log('Received End'); } else { console.log('nothing'); alert('Not For Me [listener.js]'); } }); 

background.js

 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { if(request.newTab) { // Create a new Tab chrome.tabs.create({url: request.newTab}); } else if(request.newWindow) { // Create a new Window chrome.windows.create({url: request.newWindow}); } else if(request.action) { chrome.tabs.getAllInWindow(null, function(tabs) { $.each(tabs, function() { chrome.tabs.sendRequest(this.id, {"action":"hideToolbar"} ); }); }); } }); 

但问题是addListener没有阻止执行,他只是没有抓到任何东西……

要将请求从后台页面发送到内容脚本,您需要使用chrome.tabs.sendRequest (而不是chrome.extension.sendRequest )并提供选项卡ID。

在内容脚本中,您不需要定期创建chrome.extension.onRequest.addListener ,只需创建一次,它就会永久存在。

编辑

要从内容脚本发送请求,您需要在那里运行chrome.extension.sendRequest并将chrome.extension.onRequest.addListener添加到后台页面。