问题
I have an chrome native application in windows form( c#). it use to open when i enable the extension in chrome. Can we manage this to open only when the application exe is clicked? How can we do that? This is the c# code
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;
}
Menifest file to connect chrome extension with application
{
"name": "com.example.native",
"description": "Native support for Chrome Extension",
"path": "NativeApp.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://ajfkjfmkedgcgdckdkmppfblonpeench/"
]
}
回答1:
The point of a Native Host app is to be opened by Chrome as necessary. If you open an instance of it manually, it won't be connected to Chrome.
In pseudocode, you could implement the following logic in your native app:
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 might be of interest.
来源:https://stackoverflow.com/questions/25531010/need-to-open-chrome-native-app-on-click-of-it-not-at-the-time-of-enable-the-ext