Emb*_*ign 10 google-chrome google-chrome-extension chrome-native-messaging
我写了一个chrome扩展,调用这个connect()函数连接到本地C++程序:
function connect() {
console.log("test1");
//port = chrome.extension.connectNative('com.a.chrome_interface');
port = chrome.runtime.connectNative('com.a.chrome_interface');
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);
console.log("test5");
}
Run Code Online (Sandbox Code Playgroud)
我可以在Console中看到test1,但之后我收到了错误
Uncaught TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
在线
port = chrome.runtime.connectNative('com.a.chrome_interface');
Run Code Online (Sandbox Code Playgroud)
我的扩展清单文件在这里:
{
"name": "CPP_Connect",
"version": "1.0",
"description": "Send data to CPP program",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["contentscript.js"]
}
],
"permissions": ["contextMenus", "tabs", "nativeMessaging", "<all_urls>"],
"manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)
我的com.a.chrome_interface.json看起来像这样:
{
"name": "com.a.chrome_interface",
"description": "Chrome Native Messaging API Example Host",
"path": "com.a.chrome_interface",
"type": "stdio",
"allowed_origins": [
"chrome-extension://abc.../"
]
}
Run Code Online (Sandbox Code Playgroud)
com.a.chrome_interface是一个linux可执行C++文件,它生成一个文件,如果它被调用,则永远不会创建该文件.我确实放了两个文件
/etc/opt/chrome/native-messaging-hosts/
Run Code Online (Sandbox Code Playgroud)
所以我想,我确实正确地注册了我的C++,但我也猜测,如果我注册错了,我应该得到一个不同的错误.如果我使用chrome.extension.connect()脚本运行低谷,错误消息消失,但没有数据到达我的C++程序.
我确实阅读并尝试按照https://developer.chrome.com/extensions/messaging#native-messaging上的说明进行 搜索并搜索了很多内容,但我可以找出问题的原因.
我在Ubuntu 12.04上使用Chromium 34.
Emb*_*ign 15
connectNative()在内容脚本中不可用.要连接到本地程序,内容脚本必须将数据发送到例如扩展的后台脚本和后台脚本中,
port = chrome.extension.connectNative
才能使用.所以这是一个解决方案
contentscript.js:
....
// send data to background script
chrome.extension.sendRequest("Some Data");
....
Run Code Online (Sandbox Code Playgroud)
background.js:
function connect() {
// connect to local program com.a.chrome_interface
port = chrome.extension.connectNative('com.a.chrome_interface');
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);
}
chrome.extension.onRequest.addListener(function(data, sender) {
if (data.length > 0) {
connect();
sendNativeMessage(data);
}
});
Run Code Online (Sandbox Code Playgroud)
如上所述manifest.json在我的问题中,但另外:
...
"background": {
"scripts": ["background.js"]
},
...
Run Code Online (Sandbox Code Playgroud)
com.a.chrome_interface.json 在上面的问题中是不变的.
| 归档时间: |
|
| 查看次数: |
5738 次 |
| 最近记录: |