4

我是 chrome 扩展的新手,在这个问题上花了几个小时后,我决定问:

我的后台脚本只会在我重新加载扩展程序并快速切换到选项卡后向我的内容脚本发送一条消息。否则什么都不会发生。

 {
  "name": "Fixes",
  "version": "2",
  "manifest_version": 2,
  "description": "SomeFixes",
  "permissions": ["tabs", "http://*/*", "https://*/*", "storage"],
  "options_page": "options.html",
  "background": {
    "persistent": false,
    "scripts": ["background.js"]
  },
  "content_scripts": [
    {
      "matches": ["<all my urls>"],
      "js": ["jquery1.7.js", "helper.js"]
    }
  ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "options.html"
  }
}

背景.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs){

                chrome.tabs.sendMessage(tabs[0].id, {type:"test"}, function(response) {});  

});

助手.js

jQuery(document).ready(function() {
//Get allowed functions
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {

if(msg.type == "test"){

alert("test received");

});

警报框仅在重新加载扩展程序后触发并快速切换到应该显示警报框的选项卡。

所以我认为每次重新加载选项卡时都应该加载 background.js。但现在它只加载一次,如果我不在那个选项卡上,它会在 helper.js 准备好发送响应之前加载。这就是我的理论。但正如我所说,我是新手,我很难理解它是如何工作的。

最终我想要完成的是让用户保存一些选项,这些选项将在每次页面加载时默认加载。在选项页面中保存选项工作得很好。弹出页面也可以正常工作。我只是无法加载默认选项,因为我无法将消息发送到内容脚本页面。

4

1 回答 1

7

每次加载扩展程序时后台页面都会运行,并且由于它是一个事件页面,它将卸载并且任何事件都会再次执行您的代码。尝试这样做

助手.js

chrome.extension.sendMessage({text:"getStuff"},function(reponse){
  //This is where the stuff you want from the background page will be
  if(reponse.type == "test")
    alert("Test received");
});

背景.js

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  if(message.text == "getStuff")
    sendResponse({type:"test"});
});

这样,内容脚本就会启动信息流,因此您可以确定它已准备好接收它。

于 2013-03-22T16:22:00.517 回答