【发布时间】:2014-05-05 17:50:41
【问题描述】:
我想制作一个 Chrome 扩展程序来检查网络资源,并通过其 url 选择图像,将其下载到客户端计算机。 我是 chrome 扩展的新手(即使我懂 javascript),所以我在 Google 上查了一下,然后我找到了这个帖子:How to log fetched network resources in JavaScript? 背景.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);
}
Parse_url 函数:http://phpjs.org/functions/parse_url/。 该脚本检查每个资源,直到找到我想要的资源,然后下载它。 它在我安装扩展后第一次正常工作:如果我更改选项卡,并且有其他资源符合 url 要求,那么脚本下载第一个选项卡的第一个资源(当我单击菜单 obj在第二个选项卡中),而不是下载新图像。这意味着 url 变量不会改变(我检查了它!) 我在问为什么。 对不起我的英语不好...
【问题讨论】:
-
你试过调试吗?
url改变了吗?您是否达到了在适当条件下执行url = x.url;的程度?
标签: javascript google-chrome google-chrome-extension background content-script