目录
----MyExtension
|----popup.html
|----popup.js
|----content.js
|----background.js
|----manifest.json
的manifest.json
{
"manifest_version": 2,
...........
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"browser_action": {
"default_title": "Practice",
"default_popup": "popup.html"
},
"permissions": [
"<all_urls>",
"tabs",
"storage",
"activeTab"
],
"background": {
"scripts": ["background.js"]
}
}
....
popup.html
<html>
<head>
....
<script src="popup.js"></script>
</head>
<body>
<input id="status" type="chckbox">
</body>
</html>
popup.js
$(document).ready(function(){
$on = $("#status");
//sends the settings to background to save it
$on.on("click",function(){
$obj = {"on":$on.prop("checked")}
browser.runtime.sendMessage($obj);
console.log("sending....");
})
})
我想尝试做的只是在选中popup.html中的复选框时向后台脚本发送消息。问题是我无法访问popup.js中的浏览器命名空间,因为它不是内容脚本或后台脚本。我无法访问内容脚本中的复选框,因为它没有链接到popup.html(如果它的链接我得到引用错误浏览器没有定义。我尝试了无数谷歌搜索和花了几个小时阅读网络扩展文档仍然找不到回答如何绕过它任何帮助赞赏。
我有个好消息 - 你可以在你的浏览器动作poupus中访问浏览器命名空间,否则它们会毫无用处:)
这意味着其他东西被打破了。
首先,如果您还没有这样做,请使用Ctrl + Shift + Alt + I打开“浏览器工具箱”,看看您可能会遇到一些不同类型的错误。
然后在你的background.js中包含这个:
function handleMessage(request, sender, sendResponse) {
console.log("Message from somewhere: ", request);
}
browser.runtime.onMessage.addListener(handleMessage);
要真正阅读邮件。
看到:
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction
在弹出窗口中运行的JavaScript可以访问与后台脚本相同的所有WebExtension API,但其全局上下文是弹出窗口,而不是浏览器中显示的当前页面。要影响网页,您需要通过消息与它们进行通信。
编辑,不相关:
$on = $("#status");
你确实意识到通过这样做你引用/创建一个全局变量'$ on',对吧?你的意思是:
var $on = $("#status");
?