jquery - Chrome 扩展程序 将消息从后台发送到内容脚本

标签 jquery google-chrome-extension

我是 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) {});  

});

helper.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 准备发送响应之前加载。这就是我的理论。但正如我所说,我对此很陌生,而且我很难理解它是如何工作的。

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

最佳答案

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

helper.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"});
});

通过这种方式,内容脚本启动信息流,以便您确定它已准备好接收信息。

关于jquery - Chrome 扩展程序 将消息从后台发送到内容脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575030/

相关文章:

javascript - 如何使它成为一个缓慢的 jQuery 计数器

javascript - 单击按钮时暂停和播放 setInterval()

javascript - 无法在按键时提交表单

javascript - 如何从另一个模式打开 Bootstrap 模式中的滚动功能?

google-chrome - chrome.identity.getProfileUserInfo() 返回空 id

javascript - 浏览器未聚焦时从网站复制到剪贴板

jquery 如果复选框值 = 2 被选中

javascript - 是否可以更改 Google Chrome 中的按键事件

google-chrome - 如何从内容脚本获取事件页面?

javascript - Chrome 扩展 - 获取用户在撰写邮件时输入的文本