1

我試圖設置OSX上的Chrome擴展和電子應用程序之間的通信。Chrome原生消息與電子應用程序

我在~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.company.app.json

{ 
    "name": "com.company.app", 
    "description": "MyApp", 
    "path": "/Users/johnryan/Desktop/Code/electron-app/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar", 
    "type": "stdio", 
    "allowed_origins": ["chrome-extension://xxxxxxxxxxxx"] 
} 

JSON文件上的Chrome擴展,我有一個簡單的本地消息電話:

chrome.runtime.sendNativeMessage('com.company.app', 
    { text: "Hello" }, 
    function(response) { 
    console.log("Received " + response); 
    }); 
在main.development.js我有

則:

var readline = require('readline'); 
var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    terminal: false 
}); 

rl.on('line', function(line){ 
    console.log("RECEIVED:" + line); 
}) 

但是,當我執行sendNativeMessage我沒有看到任何日誌中的東西。有什麼我在這裏失蹤?

+0

猜測:由於[消息用32位二進制長度開始](HTTPS ://developer.chrome.com/extensions/nativeMessaging#native-messaging-host-protocol)短消息的第一個字節是0,所以你應該用二進制模式讀取,否則它可能會被readline解釋爲字符串的標準結尾。 – wOxxOm

+0

@ wOxxOm有趣的我會試試看。我的猜測是電子方面出現了問題,default_app.asar似乎很腥,在其他例子中,它似乎指向.js文件。不知道這是否重要,但。 –

+0

@john_ryan你設法做到這一點嗎? – jonathanwiesel

回答

0

最近偶然發現了這個問題,並發現在Windows平臺上不支持從主線程訪問stdin和stdio。暫時我通過在我的電子應用程序中啓動http服務器並在windows平臺中從http端口進行偵聽來實現它。

但是,同樣應該在MAC OS上工作,只需使用電子包裝程序構建您的電子應用程序,並在路徑變量中提供您的exe(exe電子應用程序)路徑,如下所示。

{ 
    "name": "com.company.app", 
    "description": "MyApp", 
    "path": "/Users/johnryan/Desktop/Code/electron-app/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.exe", 
    "type": "stdio", 
    "allowed_origins": ["chrome-extension://xxxxxxxxxxxx"] 
} 

爲了它在窗口看到此信息可能有一個解決方案工作,

GitHub -Issue of stdin and stdio in electron application

相關問題