Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展变量不';无法更改已加载的选项卡_Javascript_Google Chrome_Google Chrome Extension_Background_Content Script - Fatal编程技术网

Javascript Chrome扩展变量不';无法更改已加载的选项卡

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

我想做一个Chrome扩展,它检查网络资源,并通过url选择一个图像,将其下载到客户端计算机。 我不熟悉chrome扩展(尽管我懂javascript),所以我在谷歌上查了一下,找到了以下线索: background.js:

    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]);
    }
});
});