在Chrome扩展程序中将变量从背景传递到弹出窗口

时间:2013-12-13 15:39:37

标签: google-chrome variables google-chrome-extension

我想进行一个简单的扩展,即将变量从后台传递到弹出窗口。问题是,我得到了“未定义”的回应。

清单:

{
  "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)

});

3 个答案:

答案 0 :(得分:7)

您的代码(正如您在问题中发布的那样)是正确的,应该可以正常工作。 (事实上​​,当我使用您提供的代码创建示例扩展时,它确实按预期工作。)
在复制粘贴实际代码时,你或者意外地改变了一些东西,或者还有其他东西搞砸了(你从帖子中遗漏了一些东西)。


顺便说一下,我建议查看更加资源友好的 event-pages (即非持久性背景页面)。请记住,移动到事件页面需要进行一些更改才能使代码正常工作:

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
}