2014-10-01 50 views
0

我正在尝试创建一个Chrome扩展程序,以便在进入某个网站时使用。我正在删除下载历史记录。我用这从后台页面:chrome.downloads.erase不起作用从内容脚本启动

chrome.downloads.erase({}, 
function(item) 
{ 
    console.log("Erased item"); 
    console.log(item); 
}); 

的问题是,当我进入我想要的网址发送后从接触剧本的消息它无法正常工作。

我使用的内容脚本

chrome.runtime.sendMessage 

在后台页面

chrome.runtime.onMessage.addListener 

这是输出我得到的虽然也有在下载历史上的一些文件发送消息和接收消息:

Erased item 
Array[0] 

如果我从后台页面控制台内部运行erase(),它会工作很好

它似乎是因为没有用户交互发生。 如果我把一个清除按钮,并点击它删除确实有效 但是,如果我使用超时它不 任何想法为什么会发生?

我已经看到,它有事情做与setTimeout的 这工作在后台页面:

setTimeout(function(){ 
console.log('erasing downloads'); 
chrome.downloads.erase({}); 
} 
, 0); 

但这并不:

setTimeout(function(){ 
console.log('erasing downloads'); 
chrome.downloads.erase({}); 
} 
, 1000); 
+0

要澄清,你想要核实整个下载历史? – Xan 2014-10-01 13:52:05

+0

是的。清除整个下载历史 – 2014-10-01 20:58:25

+1

考虑到您上次的编辑:可能是有意的,但没有记录。尝试在后台控制台中运行代码,但在'setTimeout(func,0)'中包装。 – Xan 2014-10-02 13:01:46

回答

1

我想我终于找到了问题的原因。 下载我已经关闭了浏览器与之后的taskkill/F,是这样的:

TASKKILL/IM “的chrome.exe”/ F

打开Chrome浏览器后,我在这条线在下载页面有:

thefilenamedownloaded.exe在下载完成之前,浏览器崩溃。

如果我使用taskKill/im“chrome.exe”(没有/ f)比问题没有发生。 这个错误实际上可能比这更复杂,因为当我有用户交互时它也起作用。但现在它解决了我的问题。希望这可以帮助其他人