我有以下JS函数,它是mozilla thunderbird扩展的第一个原型。 目标是连接到服务器并下载示例文件,然后解压缩并将内容存储在thunderbird配置文件文件夹中。 现在,这一切都正常工作,除了在文件系统上创建zip文件后,函数的执行停止。所以我必须重新启动这个函数,以便获得从zip文件中提取user.js文件的第二部分函数。 任何想法可能是什么问题?为什么JavaScript函数会停止执行?
function downloadFile(httpLoc) {
// get profile directory
var file = Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties).
get("ProfD", Components.interfaces.nsIFile);
var profilePath = file.path;
// change profile directory to native style
profilePath = profilePath.replace(/\\/gi , "\\\\");
profilePath = profilePath.toLowerCase();
// download the zip file
try {
//new obj_URI object
var obj_URI = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI(httpLoc, null, null);
//new file object
var obj_TargetFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
//set to download the zip file into the profil direct
obj_TargetFile.initWithPath(profilePath + "\/" + "test.zip");
//if file the zip file doesn't exist, create it
if(!obj_TargetFile.exists()) {
alert("zip file wird erstellt");
obj_TargetFile.create(0x00,0644);
}
//new persitence object
var obj_Persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Components.interfaces.nsIWebBrowserPersist);
// with persist flags if desired ??
const nsIWBP = Components.interfaces.nsIWebBrowserPersist;
const flags = nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES;
obj_Persist.persistFlags = flags | nsIWBP.PERSIST_FLAGS_FROM_CACHE;
//save file to target
obj_Persist.saveURI(obj_URI,null,null,null,null,obj_TargetFile);
} catch (e) {
alert(e);
} finally {
// unzip the user.js file to the profile direc
// creat a zipReader, open the zip file
var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"]
.createInstance(Components.interfaces.nsIZipReader);
zipReader.open(obj_TargetFile);
//new file object, thats where the user.js will be extracted
var obj_UnzipTarget = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
//set path for the user.js
obj_UnzipTarget.initWithPath(profilePath + "\/" + "user.js");
// if user.js doesn't exist, create it
if(!obj_UnzipTarget.exists()) {
alert("user.js wird erstellt");
obj_UnzipTarget.create(0x00,0644);
}
// extract the user.js out of the zip file, to the specified path
zipReader.extract("user.js", obj_UnzipTarget);
zipReader.close();
}
}
var hello = {
click: function() {
downloadFile("http://pse2.iam.unibe.ch/profiles/profile.zip");
},
};
对于它的价值,你不是唯一的这个问题。这个人通过设置一些随机变量来“解决”它看起来像? http://forums.mozillazine.org/viewtopic.php?f=27&t=236477 – 2011-03-22 01:14:32
为了吸引更多的帮助,您应该将结果包含在javascript错误控制台中(在菜单Tools-> Error Console中)。你也应该编辑整理这个问题,看起来很整洁,人们可以阅读它。在两个可滚动代码窗口和额外纯文本之间拆分时,脚本很难读取... – Paul 2011-03-22 01:22:31
以下是错误消息...错误:未捕获的异常:[异常...]组件返回的失败代码:0x80004005(NS_ERROR_FAILURE) [nsIZipReader.open]“nsresult:”0x80004005(NS_ERROR_FAILURE)“位置:”JS frame :: chrome://pse1/content/test.js; version = 1.7 :: downloadFile :: line 44“data:no] – Patrick 2011-03-22 08:26:39