首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Chrome扩展将消息从Background.js发送到内容脚本

Chrome扩展将消息从Background.js发送到内容脚本
EN

Stack Overflow用户
提问于 2014-01-16 05:02:19
回答 3查看 16.8K关注 0票数 22

我已经阅读了有关如何从后台javascript文件(main.js)向内容脚本(content.js)发送消息的文档,但我无法让onMessage打开我的警报。

Manifest.json

代码语言:javascript
复制
{
   "name": "Example",
   "version": "1.0.1",
   "manifest_version" : 2,
   "description": "Example Description",
   "background" : {
     "scripts" : ["main.js"]
   },
   "page_action" : {
      "default_icon": {
         "19": "icons/19.png",
         "38": "icons/38.png"
      },
      "default_title" : "Example Title"
   },
   "content_scripts": [{
      "matches": ["<all_urls>"],
      "js": ["lib/jquery-1.8.3.min.js","scripts/content.js"],
      "run_at": "document_idle",
      "all_frames": false
   }],
   "permissions": [
       "tabs",
       "geolocation"
   ],
   "icons": {
       "16": "icons/16.png",
       "48": "icons/48.png",
       "128": "icons/48.png"
   }

}

后台javascript文件(main.js)

代码语言:javascript
复制
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
    chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});  
});

内容javascript文件(content.js)

代码语言:javascript
复制
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
   if (msg.action == 'SendIt') {
      alert("Message recieved!");
   }
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-18 17:22:38

感谢@Teepeemm的洞察,我在将消息发送到内容脚本之前包含了一个tab加载完成。

等待选项卡完全加载

代码语言:javascript
复制
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {          
   if (changeInfo.status == 'complete') {   
      chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
         chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});  
      });
   }
});
票数 15
EN

Stack Overflow用户

发布于 2014-01-16 06:05:22

旁白:chrome.extension.onMessage已被弃用,您应该使用chrome.runtime.onMessage -尽管我不相信这会解决您的问题。

我记得我在使用内容脚本注入一个精简的jquery文件时遇到了一个问题。尝试使用未压缩的版本(例如jquery-1.8.3.js)。完成此操作后,还要在清单文件中的web_accessible_resources中添加jquery-1.8.3.js。(阅读有关该here的信息)

如果仍然不起作用,我的最后一个建议是将"<all_urls>"添加到清单中的权限数组中。

票数 0
EN

Stack Overflow用户

发布于 2014-01-17 13:15:54

如果让每个脚本声明它的存在(相对于alert,我更喜欢console.log ),您会看到后台脚本只运行一次(在安装或启动时),而内容脚本则随每个新页面一起运行。这意味着你需要一些外部事件来触发消息。就像这样

代码语言:javascript
复制
chrome.pageAction.onClicked.addListener(function(tab) {
    chrome.tabs.sendMessage(tab.id,{action:"SendIt"});
});

并且不要忘了适当地调用chrome.pageAction.show(tabId);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21148115

复制
相关文章

相似问题

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