我正在开发使用Native Messaging的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]
});
}
}
如何检查主机的安装时间,然后再与之连接?
答案 0 :(得分:0)
感谢@wOxxOm我可以解决问题。
解决方案是在注入内容脚本时,页面会向background.js
脚本发送消息以尝试连接到本地应用定期。
这样,无论什么时候都没有t返回错误,表示已安装主机。
最终的脚本如下:
<强> 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);
}
}