如何检查是否安装了 Native Host?
How do I check if Native Host was installed?
我正在开发一个 Google Chrome 使用本地消息传递的扩展。
在一些测试中 (之前已经手动安装了本地主机) 我已经成功连接并执行了我需要的一切。一切顺利。
我需要安装后立即下载并发送消息给主机。
我可以在扩展时自动下载它已安装。
var downloadItem = function(){
chrome.downloads.download({
url: "http://example.net/downloads/host.exe"
}, insertContentScripts);
}
chrome.runtime.onInstalled.addListener(downloadItem);
下载开始后,内容脚本会注入特定的选项卡。
var insertContentScripts =
chrome.windows.getAll({
populate: true
}, function (windows) {
var i = 0, w = windows.length, currentWindow;
for ( ; i < w; i++ ) {
currentWindow = windows[i];
var j = 0, t = currentWindow.tabs.length, currentTab;
for ( ; j < t; j++ ) {
currentTab = currentWindow.tabs[j];
// load just on example.com pages
if (currentTab.url.match(regex)) {
injectIntoTab(currentTab);
}
}
}
});
}
var injectIntoTab = function (tab) {
// You could iterate through the content scripts here
var scripts = chrome.manifest.content_scripts[0].js;
var i = 0, s = scripts.length;
for( ; i < s; i++ ) {
console.debug("Inserting script '" + scripts[i] + "' to tab " + tab.url);
chrome.tabs.executeScript(tab.id, {
file: scripts[i]
});
}
}
如何查看主机何时安装,然后连接?
感谢@wOxxOm 我可以解决问题。
解决方案是在注入内容脚本时,页面向 background.js
脚本发送消息以尝试 定期 .
连接到本机应用程序,这样,每当它没有 returns 错误时,就意味着主机已安装。
最终脚本如下所示:
content.js
chrome.runtime.sendMessage({funcao: "testExtension"}, function(response) {
console.log(response);
});
background.js
if (request.funcao == "testExtension"){
var timerId = 0;
timerId = setInterval(function () {
message(timerId);
}, 1000);
}
消息(id)函数
function message(timerId){
var success = false;
chrome.runtime.sendNativeMessage('com.pany.app', {"funcao": "testExtension"},
function(response) {
if (typeof chrome.runtime.lastError === "undefined" || chrome.runtime.lastError.message.indexOf("not found") === -1) {
success = true;
}
});
if(success){
clearInterval(timerId);
}
}
我正在开发一个 Google Chrome 使用本地消息传递的扩展。
在一些测试中 (之前已经手动安装了本地主机) 我已经成功连接并执行了我需要的一切。一切顺利。
我需要安装后立即下载并发送消息给主机。
我可以在扩展时自动下载它已安装。
var downloadItem = function(){
chrome.downloads.download({
url: "http://example.net/downloads/host.exe"
}, insertContentScripts);
}
chrome.runtime.onInstalled.addListener(downloadItem);
下载开始后,内容脚本会注入特定的选项卡。
var insertContentScripts =
chrome.windows.getAll({
populate: true
}, function (windows) {
var i = 0, w = windows.length, currentWindow;
for ( ; i < w; i++ ) {
currentWindow = windows[i];
var j = 0, t = currentWindow.tabs.length, currentTab;
for ( ; j < t; j++ ) {
currentTab = currentWindow.tabs[j];
// load just on example.com pages
if (currentTab.url.match(regex)) {
injectIntoTab(currentTab);
}
}
}
});
}
var injectIntoTab = function (tab) {
// You could iterate through the content scripts here
var scripts = chrome.manifest.content_scripts[0].js;
var i = 0, s = scripts.length;
for( ; i < s; i++ ) {
console.debug("Inserting script '" + scripts[i] + "' to tab " + tab.url);
chrome.tabs.executeScript(tab.id, {
file: scripts[i]
});
}
}
如何查看主机何时安装,然后连接?
感谢@wOxxOm 我可以解决问题。
解决方案是在注入内容脚本时,页面向 background.js
脚本发送消息以尝试 定期 .
连接到本机应用程序,这样,每当它没有 returns 错误时,就意味着主机已安装。
最终脚本如下所示:
content.js
chrome.runtime.sendMessage({funcao: "testExtension"}, function(response) {
console.log(response);
});
background.js
if (request.funcao == "testExtension"){
var timerId = 0;
timerId = setInterval(function () {
message(timerId);
}, 1000);
}
消息(id)函数
function message(timerId){
var success = false;
chrome.runtime.sendNativeMessage('com.pany.app', {"funcao": "testExtension"},
function(response) {
if (typeof chrome.runtime.lastError === "undefined" || chrome.runtime.lastError.message.indexOf("not found") === -1) {
success = true;
}
});
if(success){
clearInterval(timerId);
}
}