我想进行一个简单的扩展,即将变量从后台传递到弹出窗口。问题是,我得到了“未定义”的回应。
清单:
{
"name": "Get var",
"description": "get var",
"version": "2.0",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"browser_action": {
"default_title": "Get that variable",
"default_popup": "popup.html"
},
"manifest_version": 2
}
background.js
var myURL = 'aaa';
popup.html
<!doctype html>
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
</body>
</html>
popup.js
document.addEventListener('DOMContentLoaded', function () {
var bg = chrome.extension.getBackgroundPage();
var myURL = bg.myURL;
alert(myURL)
});
答案 0 :(得分:7)
您的代码(正如您在问题中发布的那样)是正确的,应该可以正常工作。 (事实上,当我使用您提供的代码创建示例扩展时,它确实按预期工作。)
在复制粘贴实际代码时,你或者意外地改变了一些东西,或者还有其他东西搞砸了(你从帖子中遗漏了一些东西)。
document.addEventListener('DOMContentLoaded', function () {
chrome.runtime.getBackgroundPage(function (bg) {
var myUrl = bg.myUrl;
alert(myUrl);
});
});
<子>
注意:我不以任何方式暗示您收到undefined
的原因是您使用的是持久性背景页面。您发布的代码应该可以在持久的后台页面中正常工作 - 使用事件页面(只要有可能)这是更好的做法。
子>
答案 1 :(得分:0)
我遇到过类似的问题;我的问题是我在更改清单后没有重新加载扩展名。
我猜这个OP的问题是一样的。
答案 2 :(得分:-3)
最后我发现了问题,我读了后台页面需要后台工作权限(chrome extension permissions documentation here)。所以我改变了这样的表现:
{
"name": "Get var",
"description": "get var",
"version": "2.0",
"permissions": [
"activeTab,background"
],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"browser_action": {
"default_title": "Get that variable",
"default_popup": "popup.html"
},
"manifest_version": 2
}