我正在尝试更改使用chrome扩展名下载的文件的名称。我所做的是解析网页(使用jQuery),从中我给出了文件的名称。现在这是我的代码的结构:< / p>
download event listener{
javascript code
jquery code to parse webpage
change file name
}
正在发生的事情是,在jquery完成解析之前下载文件并在jquery完成执行之前更改文件名代码,这反过来导致错误的文件名。我不明白问题是什么以及如何纠正它。我认为不需要完整的代码,所以我不发布那个。是否有任何方法我限制文件名更改,直到jquery完成? 编辑 代码:
chrome.downloads.onDeterminingFilename.addListener(
function (downloadItem, suggest)
{ window.alert(downloadItem.url);
window.alert("inside downloads");
if (/^https?:\/\/ieeexplore\.ieee\.org.*/.test(downloadItem.referrer))
{
x=downloadItem.url;
window.alert("match done")
folder="newww";
window.alert(String(downloadItem.referrer));
z=downloadItem.referrer;
var res = z.split("arnumber=");
var res1 = res[1].split("&");
alert(res1[0]);
console.log(res1[0]);
u="http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber="+res1[0];
console.log(u);
$(document).ready(function(){
$.get(u, function(data)
{//parse webpage here
//set the value of name here
});
});
if(isPDF(downloadItem))
{ alert("lame");
suggest({filename: folder + "/" + name});
}
else suggest();
}
});
function isPDF(item)
{
if(item.mime === "application/pdf") return true;
else if (item.filename.match(/\.pdf$/i)) return true;
else return false;
}
问题是更改名称的if函数在jquery之前运行...
答案 0 :(得分:0)
我不完全确定你的问题是什么,但也许
$(document).ready(function(){
// some code that gets executed when the page finished loading
});
可能会帮到你。
如果您有callback
用于下载文件的功能,则可以查看jQuery文档。然后你可以按照
somefiledownload.ready(function(){
// some code that gets executed when the download finished
});
答案 1 :(得分:0)
大家好消息,你can call suggest
asynchronously!
if (/^https?:\/\/ieeexplore\.ieee\.org.*/.test(downloadItem.referrer))
{
/* ... */
$.get(u, function(data)
{
//parse webpage here
//set the value of name here
suggest({filename: result}); // Called asynchronously
});
return true; // Indicate that we will call suggest() later
}
关键点:chrome.downloads.onDeterminingFilename
处理程序将在$.get
回调执行之前退出。在这种情况下,默认情况下Chrome不会等待您的建议 - 但您可以指示&#34;我稍后会告诉您,请等待&#34;通过返回true
。这些都写在文档中。
请阅读有关异步功能的一些教程。例如,this answer。