2014-01-24 68 views
0

我正在嘗試適用於Chrome擴展程序的Chrome本機信息API。本機應用程序在Chrome擴展中不起作用

manifest.json的原生應用程序:

{ 
    "name": "app.native", 
    "description": "Native Message API Test.", 
    "path": "native.exe", 
    "type": "stdio", 
    "allowed_origins": ["chrome-extension://kembignchdjhopkkcolnamikcenaocdm/"] 
} 

Windows註冊表值:

HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\app.native=D:\connectNative\manifest.json 

我也試過D:\\\\connectNative\\\\manifest.json

和我添加 「nativeMessaging」 到 「權限」 Chrome擴展程序manifest.json。

生應用CPP:

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main(int argc, char* argv[]) { 
    string input = ""; 
    string message="{\"text\": \"This is a response message\",\"num\": \"three\"}"; 
    unsigned int len = message.length(); 
    cout << char(((len>>0) & 0xFF)) 
     << char(((len>>8) & 0xFF)) 
     << char(((len>>16) & 0xFF)) 
     << char(((len>>24) & 0xFF)); 
    cout << message <<endl; 
    getline(cin, input); 
    cout << "You entered: " << input << endl; 
    ofstream myfile; 
    myfile.open ("example.txt"); 
    myfile << "Writing this to a file.\n"; 
    myfile << input; 
    myfile.close(); 

    return 0; 
} 

畢竟是做,我嘗試在我的Chrome擴展:

var testport = chrome.runtime.connectNative('app.native'); 
testport.onMessage.addListener(function(msg) { 
    console.log("Received" + msg); 
}); 
testport.onDisconnect.addListener(function() { 
    console.log("Disconnected"); 
}); 

它不能接收任何消息,並始終打印 「斷開連接」。

我試圖連接到一個不存在的應用程序,它仍然打印「斷開」,所以我知道這個本地應用程序沒有配置正確。

任何人都可以指出什麼是錯的或我錯過了什麼?

+0

你沒有說native.exe所在。它在D:\ connectNative \ native.exe中嗎? – sowbug

+0

是的,我嘗試native.exe的相對路徑和絕對路徑,兩者都不起作用。 –

+2

我認爲這個問題是與註冊表項:這是我的.reg文件內容:Windows註冊表編輯器5.00版 [HKEY_LOCAL_MACHINE \ SOFTWARE \谷歌\鍍鉻\ NativeMessagingHosts \ com.windows.screen] @ =「C:\\用戶\\ abc \\桌面\\ Chrome擴展\\ manifest.json「 – rohitvk

回答

-1

帶有Native引用的工作腳本示例。請注意0​​的權限,並且Manifest.json中的外部資源沒有直接引用,該腳本中的後續內容將在.js腳本中進行介紹。

{ 
    "background": { 
     "scripts": [ "common.js", "filler.js", "background.js" ] 
    }, 
    "browser_action": { 
     "default_icon": "r.png", 
     "default_title": "Click this button to show commands" 
    }, 
    "content_scripts": [ { 
     "all_frames": true, 
     "js": [ "common.js", "content.js", "filler.js" ], 
     "matches": [ "http://*/*", "https://*/*", "file:///*" ], 
     "run_at": "document_start" 
    } ], 
    "description": "For Google Chrome", 
    "homepage_url": "http://www.app.com", 
    "icons": { 
     "128": "r.png", 
     "16": "r.png", 
     "32": "r.png", 
     "48": "r.png" 
    }, 
    "key": "???", 
    "manifest_version": 2, 
    "name": "???", 
    "options_page": "options.html", 
    "permissions": [ "tabs", "bookmarks", "webRequest", "webRequestBlocking", "nativeMessaging", "downloads", "http://*/*", "https://*/*" ], 
    "update_url": "https://clients2.google.com/???/", 
    "version": "???" 
} 
1

默認情況下,COUT是一個文本流,發送空(即發生,因爲你的尺寸的一部分,前4個字節)月初結束的文本流。

在Windows上,你可以更新COUT是通過改變基本標準輸出二進制文件,不要忘了衝......

_setmode(_fileno(stdout), _O_BINARY); 
int len = msg.length(); 
std::cout << char(len >> 0) 
    << char(len >> 8) 
    << char(len >> 16) 
    << char(len >> 24); 

std::cout << msg << std::flush; 
相關問題