我是 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/