我在Windows窗体中有一个chrome本机应用程序(c#)。当我在chrome中启用扩展时,它用于打开。我们可以管理它只在单击应用程序exe时打开吗? 我们怎么做? 这是c#代码
private static string OpenStandardStreamIn()
{
//// We need to read first 4 bytes for length information
Stream stdin = Console.OpenStandardInput();
int length = 0;
byte[] bytes = new byte[4];
stdin.Read(bytes, 0, 4);
length = System.BitConverter.ToInt32(bytes, 0);
string input = "";
for (int i = 0; i < length;i++ )
{
input += (char)stdin.ReadByte();
}
return input;
}
private static void OpenStandardStreamOut(string stringData)
{
//// We need to send the 4 btyes of length information
string msgdata = "{\"text\":\"" + stringData + "\"}";
int DataLength = stringData.Length;
Stream stdout = Console.OpenStandardOutput();
stdout.WriteByte((byte)((DataLength >> 0) & 0xFF));
stdout.WriteByte((byte)((DataLength >> 8) & 0xFF));
stdout.WriteByte((byte)((DataLength >> 16) & 0xFF));
stdout.WriteByte((byte)((DataLength >> 24) & 0xFF));
//Available total length : 4,294,967,295 ( FF FF FF FF )
Console.Write(msgdata);
}
background.Js Code
var host_name = "com.example.native";
var port = null;
connectToNative();
function connectToNative()
{
console.log('Connecting to native host: ' + host_name);
port = chrome.runtime.connectNative(host_name);
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);
sendNativeMessage("test");
}
function sendNativeMessage(msg) {
message = {"text" : msg};
console.log('Sending message to native app: ' + JSON.stringify(message));
port.postMessage(message);
console.log('Sent message to native app: ' + msg);
}
function onNativeMessage(message) {
console.log('recieved message from native app: ' + JSON.stringify(msg));
}
function onDisconnected() {
console.log(chrome.runtime.lastError);
console.log('disconnected from native app.');
port = null;
}
将Chrome扩展程序与应用程序连接的清单文件
{
"name": "com.example.native",
"description": "Native support for Chrome Extension",
"path": "NativeApp.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://ajfkjfmkedgcgdckdkmppfblonpeench/"
]
}
答案 0 :(得分:2)
必要时Chrome会打开Native Host app的点。如果您手动打开它的实例,则无法连接到Chrome。
在伪代码中,您可以在原生应用中实现以下逻辑:
if( /* opened by Chrome */ ){
// Do not show UI
// Listen for command to show UI
// Communicate with Chrome
} else {
if( /* there is an open instance of the app */) {
// Message that instance to show UI
// Terminate
} else {
// Show error, terminate
}
}
This question可能会引起人们的兴趣。