javascript在chrome扩展中运行befor jquery

时间:2014-07-24 12:26:31

标签: javascript jquery google-chrome google-chrome-extension

我正在尝试更改使用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之前运行...

2 个答案:

答案 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