【发布时间】:2015-10-15 11:46:54
【问题描述】:
我正在编写一个 chrome 扩展程序,它既有用于操作当前选项卡数据的 content.js,也有一个在执行时生成的弹出窗口。但是,我的问题是,当我对扩展进行更改时,我必须重新加载扩展并刷新页面,否则它会给我一个“错误建立连接,端口不存在”错误。这是我的 manifest.json 文件
{
"manifest_version": 2,
"name": "extension",
"version": "0.0",
"offline_enabled": true,
"content_scripts": [
{
"matches": [
"*://mail.google.com/*"
],
"css": ["css/jquery-ui.css"],
"js": ["js/jquery.js" , "js/jquery-ui.js" , "js/bootstrap.js" , "js/commons.js" , "js/content.js"],
"run_at": "document_end"
}
],
"browser_action": {
"default_title": "chrome",
"default_popup": "html/popup.html"
},
"permissions": [
"tabs",
"https://*.*.*/"
]
}
【问题讨论】:
-
您在 content.js 中是否有任何代码尝试在线连接?
-
我有几个对站点的 API 调用是的。这是导致问题的原因吗?
-
根据我对扩展的有限知识,我认为这是你的问题。 API 调用应移至 background.js。这是有类似问题的人:stackoverflow.com/questions/13637715/… 内容脚本应该用于与选项卡中的“当前”页面进行交互。像密码保护程序、开发/调试扩展、linter 等。 developer.chrome.com/extensions/content_scripts
-
如果这听起来很愚蠢,请原谅我,但是如果我将 content.js 更改为 background.js 会怎样? background.js 还能抓取 DOM 吗?如果我这样做,我需要在 manifest.js 中进行哪些更改?
-
不,这对我来说听起来并不愚蠢。但它将无法访问 DOM。我认为背景和内容之间的“桥梁”可以解决您的问题。所以你应该两者兼得。 Chrome 支持通过 chrome.runtime.sendMessage + .onMessage 在内容脚本和/或后台页面之间进行通信。但请注意,数据将被 JSON 序列化,因此您无法传输像 jQuery 这样的对象。