我开发了一个使用Native Messaging通信的Google Chrome扩展程序。
嗯...扩展功能完美,但问题是Native Messaging主机未在计算机启动时启动。要启动它,我必须打开chrome,列表扩展,找到我的扩展,然后禁用并重新启用它。
我已经意识到的一件事。是当我禁用并重新启用扩展并查看任务管理器时,我可以看到3个进程开始运行:chrome.exe,cmd和我的本机消息传递主机exe。
也许所有3个进程都没有在启动时启动,因为" cmd"命令?
为什么cmd命令与本机消息传递主机exe一起启动?我怎么能避免它?
编辑:
这是manifest.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);
}
}
答案 0 :(得分:2)
由于本地消息传递主机仅按chrome.runtime.connectNative
按"permissions": ["background", "nativeMessaging"],
启动,因此您需要在计算机启动时通过在扩展程序清单中指定the documentation来启动扩展程序上传.json:
[x] Continue running background apps when Google Chrome is closed
如果任何已安装的托管应用,打包应用或扩展程序具有“后台”权限,则只要用户登录其计算机,Chrome就会立即运行(无形) - 在用户启动Chrome之前。 “后台”权限还允许Chrome继续运行(即使在最后一个窗口关闭后),直到用户明确退出Chrome。
用户可以在Chrome的设置中禁用此行为:
cmd
选项。
--parent-window=
以创建stdio管道。在Windows上,命令行为:
C:\ Windows \ system32 \ cmd.exe / c YOURHOSTAPP.exe --parent-window = 10158736 chrome-extension:// knldjmfmopnpolahpmmgbagdohdnhkik /&lt; \。\ pipe \ chrome.nativeMessaging.in.9c12d69ad9deb1ce&gt; \。\管\ chrome.nativeMessaging.out.9c12d69ad9deb1ce
"background"
permission chrome-extension://
参数将在git checkout -b mybranch
之后移动。