为什么chrome.runtime未定义?

iga*_*tto 2 javascript google-chrome-extension

我正在创建Google Chrome扩展程序(我的第一个扩展程序),并且我希望将扩展程序中的邮件发送到当前选项卡.

我正在关注文档:

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

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

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(request)
    }
);
Run Code Online (Sandbox Code Playgroud)

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

Uncaught TypeError: Cannot read property 'onMessage' of undefined.

打开控制台和键入chrome,我可以看到运行时不是属性chrome.

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

Chrome版本39.0.2171.71米

谢谢.

Xan*_*Xan 7

如果您将JavaScript插入带有<script>标记的页面,它将在页面的上下文中执行.

有时需要:这是访问页面级JavaScript对象的唯一方法.

但在您的情况下,这意味着代码无法访问Chrome API,因为它与页面代码"相同".

您需要研究页面级和上下文脚本之间的通信,或者页面级和后台之间的通信(剧透,在大多数情况下需要上下文脚本代理).


jco*_*ctx 5

或者它可能只是只在某些情况下出现的海森虫。就我而言,关闭 chrome://extensions 选项卡并刷新我的目标会导致 chrome.runtime 再次可用。为什么 chrome.runtime 在内容脚本中未定义?