来自内容脚本:
chrome.runtime.sendMessage({ type: "getFormatOption" }, function (response) {
return response === 'csv';
});
我在控制台中进行了检查:来自background.js方法的SendResponse()中使用的值是正常的。问题是响应总是不明确的。我做错了什么?
background.js:
chrome.runtime.onMessage.addListener(
function (message, sender, sendResponse) {
switch (message.type) {
case 'getFormatOption':
var response = $('input[name=csvOrEnter_radio]:checked', '#csvOrEnter_form').val();
console.log('formatOption: ' + response);
sendResponse(response);
break;
case 'getFilteringStrategy':
var response = $('input[name=filteringStrategy_radio]:checked', '#filteringStrategy_form').val();
console.log('filteringStrategy: ' + response);
sendResponse(response);
break;
default:
console.error('Unrecognised message: ', message);
}
}
);
我从插件popup.html中的radiobuttons中获取一些值的想法。
清单:
{
// default for the latest version of Chrome extensions
"manifest_version": 2,
// extension related general info
"name": "FB Interest Search Tool",
"short_name": "FB Interest Search Tool",
"description": "FB Interest Search Tool",
"version": "1.0.0",
"default_locale": "en",
// sets path to popup files
"browser_action": {
"default_icon": "img/128.png",
"default_popup": "popups/popup.html",
"default_title": "FB Interest Search Tool"
},
// sets path to content scripts and when they are injected onto the page
"content_scripts": [
{
"matches": [ "http://*/*", "https://*/*" ],
"css": [ "styles/styles.css" ],
"js": [
"bower_components/jquery.min.js",
"bower_components/jquery.cookie.js"
]
}
],
// sets path to background scripts
"background": {
"scripts": [
"bower_components/jquery.min.js",
"bower_components/jquery.cookie.js",
"bg/background.js",
"content-scripts/rewriteStorage.js"
]
},
"permissions": [
"activeTab",
"http://*/",
"https://*/",
"file:///*/*",
"<all_urls>",
"tabs",
"storage",
"unlimitedStorage",
"storage",
"cookies"
],
"web_accessible_resources": [ "styles/commentblocker_on.css" ]
}
答案 0 :(得分:2)
background.js
。我甚至没有开玩笑。 好吧也许一点点。
由于它在弹出窗口中包含BOTH并且作为后台脚本,因此注册了2个消息侦听器。 only one can answer:
注意:如果有多个网页正在侦听
onMessage
个事件,则只有第一个为特定事件调用sendResponse()
才能成功发送响应。对该事件的所有其他回复都将被忽略。
猜猜哪个先回答?我的投注是在幕后,因为它首先注册了听众。
如果您尝试调试时仍然看到侦听器在弹出窗口中执行,则会忽略其sendResponse
,因为后台已经应答。
这个很容易解决:制作副本,称之为popup.js
,并在两者中仅保留相关逻辑。不要在两个地方都包含相同的文件,除非您需要在两者中运行100%的特定代码。
当弹出窗口关闭时 - 它已经死了,吉姆。它根本就不存在:既不是听众也不是无线电按钮。因此,它无法接听信息。
修复此问题需要重新构建体系结构。只有2个可以提供存储的地方,您可以随时查询:
chrome.storage
API。弹出窗口和内容脚本都可以读/写它。对于选项,第二个是优选的。