当前位置: 动力学知识库 > 问答 > 编程问答 >

c# - need to open chrome native app on click of it, not at the time of enable the exension

问题描述:

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/"

]

}

网友答案:

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.

分享给朋友:
您可能感兴趣的文章:
随机阅读: