2011-06-29 6 views
1

私はFirefox拡張機能を作成しています。今私はXMLファイルのローカルコピーを作成する必要があり、私はほぼ成功しています。ファイルが読み込まれ、新しいファイルが作成されますが、このファイルは空です。 XMLファイルの特別な方法はありますか、それともなぜ機能しませんか?ここで Javascriptを使用してFirefox Extensionの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(); 
     } 
    } 
} 

第二の機能の始まりはただのローカルコピーのみと呼ばれるウェブサイトのHAST同じURL場合は行われるべきであること、を宣言拡張機能の設定で定義されたURLとして使用します。この部分はうまく動作します。

答えて

0

nsIOutputStream.write()の最初のパラメータは文字列でなければなりません。その代わりにXMLドキュメントを提供しています。 XMLSerializerを使用すると、XMLをテキストに変換してストリームに直接書き込むことができます。

new XMLSerializer().serializeToStream(xml, stream, "utf-8"); 
関連する問題