谷歌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.runtime.connectNative
启动,因此您需要在计算机启动时通过在扩展的manifest.json中指定"background"
权限来启动扩展:"permissions": ["background", "nativeMessaging"],
当任何安装的托管应用程序,打包应用程序,或扩展具有"后台"权限,Chrome运行(看不见),只要用户登录到他们的电脑之前,用户启动Chrome。"后台"权限也使Chrome继续运行(即使在最后一个窗口关闭后),直到用户明确退出Chrome。
用户可以在Chrome的设置中禁用此行为:
[x] Continue running background apps when Google Chrome is closed
选项。 启动 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://
参数之后。