【发布时间】:2015-11-24 12:40:08
【问题描述】:
我们在 servlet 中有一个 JSP 页面,我们在客户端开发了一个 google chrome 扩展。我们希望通过 JSP 或 html 与扩展进行通信。正如我们所搜索的,应该有一个 background.js 和一个内容脚本。我们将 background.js 放在扩展文件夹中,并在 chrome 中注册它。然后当我们将内容脚本放在 JSP 或外部网页旁边时,这两个页面无法交互。 这是 background.js 的代码:
alert("hey back");
chrome.runtime.onConnectExternal.addListener(function (port) {
port.postMessageExternal({ greeting: "hey" });
port.onMessageExternal.addListener(function (message, sender) {
if (message.greeting == "salam") {
alert("message from content: " + message.greeting);
port.postMessageExternal({ greeting: "H R U?" });
}
else if (message.greeting == "khobam") {
alert("message from content: " + message.greeting);
}
else {
alert("background did not receive salam");
}
});
});
这是 manifest.json:
{
"manifest_version": 2,
"name": "msg-test",
"description": "message test",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png"
},
"background": {
"scripts": ["background.js"],
"persistent": true
},
"permissions": [
"tabs",
"http://*/*"
],
"offline_enabled": true,
"externally_connectable": {
"ids":["*"],
"matches": ["file:///C:/Users/h.aghajani/Desktop/b.html"],
"accept_tls_channel_id":true
}
}
这是内容脚本:
alert("hey content");
var port = chrome.runtime.connect({ name: "mycontentscript" });
port.onMessage.addListener(function (message, sender) {
if (message.greeting == "hey") {
alert("message from background: " + message.greeting);
port.postMessage({ greeting: "salam" });
}
else if (message.greeting == "H R U?") {
alert("message from background: " + message.greeting);
port.postMessage({ greeting: "khobam" });
}
else {
alert("content did not receive hello");
port.postMessage({ greeting: "no salam" });
}
});
有一些问题:
它根本不起作用。问题出在哪里?事实上,我们怎么能称之为 来自外部网页的后台脚本?
此外,如果我们将内容脚本放在扩展文件夹中,每当浏览器离线工作(没有互联网连接)时,后台和内容脚本就无法正常对话。
谢谢。
【问题讨论】:
-
这不是内容脚本,除非它是 defined as one。从
externallyConnectable来看,您想发送消息from a web page script,但我在代码中的任何地方都看不到它是如何执行的。也许你可以在 github 或 tinyurl.com 之类的东西上链接整个扩展? -
我也有同样的问题。这是 chrome 扩展程序和外部网页之间的长期消息传递通信。 Chrome 没有提供任何合适的示例文档!!!
-
亲爱的@wOxxOm,你的意思是没有足够的内容和背景js。我们还需要什么模块?你能告诉我们吗?
-
我们在html中调用content.js,如: 当我们加载这个html时,我们看到的只是内容脚本的alert。跨度>
-
您应该在
manifest.json中注册您的内容脚本。 Relevant link
标签: javascript google-chrome google-chrome-extension