need to open chrome native app on click of it, not at the time of enable the extension

半世苍凉 提交于 2019-12-23 05:42:08

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!