1
我正在編寫Firefox擴展。現在我需要創建一個XML文件的本地副本,並且我幾乎成功了。一個文件被讀取並創建一個新文件,但是這個文件是空的。有沒有XML文件的特殊方法,或者它爲什麼不起作用?使用Javascript爲Firefox擴展創建XML文件的本地副本
這裏的功能是:
function loadXMLDoc(dname) {
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", dname, false);
xhttp.send("");
return xhttp.responseXML;
}
和
function localcopy() {
var url = content.document.location.href;
var prefManagerr = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService)
.getBranch("extensions.foafnet.");
var prefStringx;
if (prefManagerr.prefHasUserValue("stringpref1")) {
prefStringx = prefManagerr.getCharPref("stringpref1");
} else {
// Preference is default value so use that
prefStringx = "0"
}
if (prefStringx == url) {
xml = loadXMLDoc(prefStringx);
var file = Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties).
get("TmpD", Components.interfaces.nsIFile);
file.append("profiletemp.xml");
file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666);
// do whatever you need to the created file
alert(file.path);
//
var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].
createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(file, 0x04 | 0x08 | 0x20, 0600, 0); // readwrite, create, truncate
stream.write(xml, xml.length);
if (stream instanceof Components.interfaces.nsISafeOutputStream) {
stream.finish();
} else {
stream.close();
}
}
}
第二函數的開始只是聲明,一個本地副本則僅在被叫網站竟同一URL來作爲在擴展的首選項中定義的URL。這部分工作得很好。