1

我使用Chrome的native messaging API連接到我正在使用Cobra library在Go中開發的本機主機。本地應用程序有一個獨立的CLI(用Cobra實現),而bare命令(沒有任何參數)通過stdin開始監聽JSON,這意味着它是一個供Chrome瀏覽器交互的API。如何在不帶參數的情況下調用Chrome本機訊息主機?

但是,每當擴展程序向本地消息傳遞主機發出請求時(客戶端立即斷開與進程的連接),它都會失敗。當我用--enable-logging標誌啓動Chrome時,我可以看到本地主機與unknown command "chrome-extension://cnjopnegooahjdngnkhiokognkdjiioc/" for "--native-app-name--"錯誤。這是Cobra的錯誤消息,意思是「chrome-extension:// cnjopnegooahjdngnkhiokognkdjiioc /」被用作參數,這似乎意味着Chrome正在調用本地主機,而不是僅僅使用app-name而是使用app-name chrome-extension://cnjopnegooahjdngnkhiokognkdjiioc/

下面是我從擴展使用調用本地主機代碼:

var port = chrome.runtime.connectNative('app-name'); 
port.onMessage.addListener(function(msg) { 
    console.log(msg); 
}); 
port.onDisconnect.addListener(function() { 
    console.log("disconnected"); 
}); 
port.postMessage({cmd:"ping"}); 

我無法找到這表明,Chrome會將擴展地址作爲參數,或者是否可以在任何文件被阻止。

+0

這非常有用,謝謝wOxxOm。你知道這被記錄在任何地方嗎? –

+2

這是正在被記錄的過程中,請參閱https://codereview.chromium.org/2271143002/ –

+0

@wOxxOm你可以請格式化爲答案? – Xan

回答

3

它是protocol的一部分,無法禁用。在Windows的命令行是這樣的:

C:\Windows\system32\cmd.exe /c YOURHOSTAPP.exe chrome-extension://.................../ 
--parent-window=6752474 < \\.\pipe\chrome.nativeMessaging.in.e11ed8be274e1a85 
> \\.\pipe\chrome.nativeMessaging.out.e11ed8be274e1a85

的第一個參數的本地消息主機是調用者的來源,通常chrome-extension://[ID of whitelisted extension]。這允許本地消息傳遞主機在本地消息傳遞主機清單中的allowed_origins鍵中指定多個擴展時識別消息的來源。

在Windows中,本地消息主機也將傳遞一個命令行參數用的句柄調用鉻機窗口:--parent-window=<decimal handle value>。這使本地消息傳遞主機可以創建正確聚焦的本地UI窗口。


警告:在Windows中,in Chrome 54 and earlier起源是作爲第二個參數,而不是第一個參數傳遞。

相關問題