谷歌chrome扩展本地消息主机写在c#是不运行在计算机启动

本文关键字:运行 启动 计算机 扩展 chrome 主机 消息 谷歌 | 更新日期: 2023-09-27 18:11:48

我开发了一个使用Native Messaging通信的Google chrome扩展。

嗯…扩展工作完美,但问题是,本地消息主机是不启动在计算机启动。要启动它,我必须打开chrome,列表扩展,找到我的扩展,然后禁用并重新启用它。

我意识到一件事。是当我禁用并重新启用扩展并查看任务管理器时,我可以看到3个进程开始运行:chrome.exe, cmd和我的本机消息主机exe。

也许所有3个进程在启动时都没有启动,因为"cmd"命令?

为什么cmd命令与本机消息传递主机exe一起启动?我怎样才能避免呢?

编辑:

这是舱单。json文件:

{
  "manifest_version": 2,
  "name": "Busca Cliente Lipigas",
  "short_name": "Busca Cliente",
  "description": "Permite recibir un número de teléfono desde SoftPhone y realizar la búsqueda del cliente en la página Web de Lipigas.",
  "version": "1.1",
  "permissions": [
    "tabs",
    "background",
    "nativeMessaging"
  ],
  "icons" : { "16": "img/icon16.png",
              "48": "img/icon48.png",
              "128": "img/icon128.png" },
  "background": {
    "scripts": ["main.js"],
    "persistent": false
    }
}
编辑:

这是背景页:

var clientSearchPage;
var clientEditPage;
var executed;
//console.log('Extensión iniciada.');
var port = chrome.runtime.connectNative('com.desytec.lipigas.sll');
port.onMessage.addListener(function (msg) {
    //console.log("Se recibió el comando " + msg.command + ' con el parámetro ' + msg.parameter);
    port.postMessage({ status: processCommand(msg.command + ' ' + msg.parameter) });
});
chrome.runtime.onSuspend.addListener(function () {
    port.postMessage({ status: 'EXIT' });
})
function processCommand(cmd) {    
    var parts = cmd.split(/'s+/);
    try {
        switch (parts[0]) {
            case 'Phone':
                executed = false;
                setPhone(parts[1]);
                return '+OK-Phone';
            case 'SetClientSearchPage':
                clientSearchPage = parts[1];
                if (clientSearchPage[0] != '/')
                    clientSearchPage = '/' + clientSearchPage;
                //console.log('Se configuró la página de búsqueda del cliente ' + clientSearchPage);
                return '+OK-SetClientSearchPage';
            case 'SetClientEditPage':
                clientEditPage = parts[1];
                if (clientEditPage[0] != '/')
                    clientEditPage = '/' + clientEditPage;
                //console.log('Se configuró la página de edición del cliente ' + clientEditPage);
                return '+OK-SetClientEditPage';
            default:
                return '+ERR-Comando No Encontrado';
        }
        //tcpConnection.sendMessage(Commands.run(cmd[0], cmd.slice(1)));
    } catch (ex) {
        return '+ERR-Comando No Procesado'
    }
}
function setPhone(phone) {
    chrome.tabs.query({
    }, function (tabs) {
        var tab = null;
        for (var i = 0; i < tabs.length; i++) {
            var tabURL = tabs[i].url;
            if (tabURL.indexOf(clientSearchPage) != -1 || tabURL.indexOf(clientEditPage) != -1)
                tab = tabs[i];
            //console.log(tabURL);
        }
        if (!executed) {
            searchClient(tab, phone);
            executed = true;
        }
    });
}
function searchClient(tab, phone) {
    if (tab == null)
        console.log('No se encontró ninguna de las páginas del cliente: ' + clientSearchPage + ', ' + clientEditPage);
    else {
        var site = '';
        var url = tab.url;
        if (url.indexOf(clientEditPage) != -1)
            site = url.substr(0, url.indexOf(clientEditPage));
        else if (url.indexOf(clientSearchPage) != -1)
            site = url.substr(0, url.indexOf(clientSearchPage));
        //console.log(site + clientSearchPage + '?telefono=' + phone);
        chrome.tabs.update(tab.id, { active: true, url: site + clientSearchPage + '?telefono=' + phone });
        //console.log('Se actualizó la URL con: ' + site + clientSearchPage + '?telefono=' + phone);
    }
}

谷歌chrome扩展本地消息主机写在c#是不运行在计算机启动

  1. 由于本地消息主机仅由chrome.runtime.connectNative启动,因此您需要在计算机启动时通过在扩展的manifest.json中指定"background"权限来启动扩展:

    "permissions": ["background", "nativeMessaging"],
    

    当任何安装的托管应用程序,打包应用程序,或扩展具有"后台"权限,Chrome运行(看不见),只要用户登录到他们的电脑之前,用户启动Chrome。"后台"权限也使Chrome继续运行(即使在最后一个窗口关闭后),直到用户明确退出Chrome。

    用户可以在Chrome的设置中禁用此行为:
    [x] Continue running background apps when Google Chrome is closed选项。

  2. 启动
  3. cmd创建工作室管道。在Windows上,命令行是:

    C:'Windows'system32'cmd.exe/C YOURHOSTAPP.exe——parent-window=10158736 chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/<' '管' chrome.nativeMessaging.in。'.'pipe'chrome.native . message .out.9c12d69ad9deb1ce

    自2016年10月5日起,--parent-window=参数将移至chrome-extension://参数之后。