为什么chrome.runtime未定义?

时间:2014-11-29 21:07:52

标签: javascript google-chrome-extension

我正在创建Google Chrome扩展程序(我的第一个扩展程序),我想将扩展程序中的邮件发送到当前标签。

我正在关注文档:

https://developer.chrome.com/apps/runtime#event-onMessage

扩展程序将一个小的外部JS加载到选项卡的HTML中,其中包含以下代码:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(request)
    }
);

加载JS后,我收到以下错误:

Uncaught TypeError: Cannot read property 'onMessage' of undefined

打开控制台并输入chrome,我可以看到运行时不是chrome的属性。

看起来我做错了什么,但是什么?我是否需要在manifest.json文件中添加内容?

Chrome版本39.0.2171.71 m

谢谢。

2 个答案:

答案 0 :(得分:7)

如果您要将JavaScript插入带有<script>标记的网页,则会在网页的上下文中执行。

有时候it is desirable:这是访问网页级JavaScript对象的唯一方法。

但在您的情况下,这意味着代码无法访问Chrome API,因为它是相同的&#34;作为页面的代码。

您需要考虑page-level and context scripts之间或page-level and background之间的沟通(剧透,在大多数情况下需要上下文脚本代理)。

答案 1 :(得分:0)

或者它可能只是一个Heisenbug,仅在某些情况下才会出现。就我而言,关闭chrome:// extensions标签并刷新我的目标导致chrome.runtime再次可用。 Why is chrome.runtime undefined in the content script?