Javascript Chrome扩展变量不';无法更改已加载的选项卡
我想做一个Chrome扩展,它检查网络资源,并通过url选择一个图像,将其下载到客户端计算机。 我不熟悉chrome扩展(尽管我懂javascript),所以我在谷歌上查了一下,找到了以下线索: background.js:Javascript Chrome扩展变量不';无法更改已加载的选项卡,javascript,google-chrome,google-chrome-extension,background,content-script,Javascript,Google Chrome,Google Chrome Extension,Background,Content Script,我想做一个Chrome扩展,它检查网络资源,并通过url选择一个图像,将其下载到客户端计算机。 我不熟悉chrome扩展(尽管我懂javascript),所以我在谷歌上查了一下,找到了以下线索: background.js: var aNetworkLog = []; chrome.webRequest.onCompleted.addListener(function(oCompleted) { var sCompleted = JSON.stringify(oComp
var aNetworkLog = [];
chrome.webRequest.onCompleted.addListener(function(oCompleted) {
var sCompleted = JSON.stringify(oCompleted);
aNetworkLog.push(sCompleted);
}
,{urls: ["http://*/*"]}
);
chrome.extension.onConnect.addListener(function (port) {
port.onMessage.addListener(function (message) {
if (message.action == "getNetworkLog") {
port.postMessage(aNetworkLog);
}
});
});
content_script.js:
var port = chrome.extension.connect({name:'test'});
document.getElementById("menu").addEventListener("click", function() {
port.postMessage({action:"getNetworkLog"});
}, false);
port.onMessage.addListener(function(msg) {
string = "";
for (i=0;i<msg.length;i++){
var res = msg[i];
var x = jQuery.parseJSON(res);
if (x.type == "image"){
var vars = parse_url(x.url);
if (typeof vars['query'] !== 'undefined' && typeof vars['host'] !== 'undefined'){
if (vars['host'] == 'myhostname' && vars['query'].indexOf('whatiwantinurl') != -1 && vars['query'].indexOf('whatidontwantinurl') == -1){
url = x.url;
break;
}
}
}
}
SaveToDisk(url,'download.png');
$('#next').click();
});
function SaveToDisk(fileURL, fileName) {
// for non-IE
if (!window.ActiveXObject) {
var save = document.createElement('a');
save.href = fileURL;
save.target = '_blank';
save.download = fileName || 'unknown';
var event = document.createEvent('Event');
event.initEvent('click', true, true);
save.dispatchEvent(event);
(window.URL || window.webkitURL).revokeObjectURL(save.href);
}
var-port=chrome.extension.connect({name:'test'});
document.getElementById(“菜单”).addEventListener(“单击”,函数)(){
port.postMessage({action:“getNetworkLog”});
},假);
port.onMessage.addListener(函数(msg){
字符串=”;
对于(i=0;i我不确定我是否完全理解了它,但问题可能是aNetworkLog是一个全局变量,它驻留在后台页面上下文中,只要浏览器工作,它就会一直存在。这就是为什么每次对它执行循环(i=0;i您尝试过调试吗?url
是否正在更改?您是否达到了在适当条件下执行url=x.url;
的程度?
var aNetworkLog = null;
chrome.tabs.onActivated.addListener(function(activeInfo) {
aNetworkLog = new Array(); // reset the array every time the active tab is changed
chrome.webRequest.onCompleted.addListener(function(oCompleted) {
aNetworkLog.push(sCompleted);
}
,{tabId: activeInfo.tabId, urls: ["http://*/*"]}
);
});
var aListOfNetworkLogs = new Object();
chrome.tabs.onUpdated.addListener(function(tab) { // or onCreated()
aListOfNetworkLogs[tab.id] = new Array();
....
aListOfNetworkLogs[tab.id].push(sCompleted);
....
});
chrome.extension.onConnect.addListener(function (port) {
port.onMessage.addListener(function (message) {
if (message.action == "getNetworkLog") {
port.postMessage(aListOfNetworkLogs[port.tabId]);
}
});
});