javascript - 使用 Javascript 为 Firefox 扩展创建 XML 文件的本地副本

标签 javascript stream firefox-addon copy

我正在编写一个 Firefox 扩展。现在我需要创建 XML 文件的本地副本,而且我几乎成功了。读取一个文件并创建一个新文件,但该文件是空的。对于 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 时,才会创建本地副本。这部分工作得很好。

最佳答案

nsIOutputStream.write() 的第一个参数必须是一个字符串 - 您将为其提供一个 XML 文档。您可以使用XMLSerializer将 XML 转换为文本并直接将其写入流:

new XMLSerializer().serializeToStream(xml, stream, "utf-8");

关于javascript - 使用 Javascript 为 Firefox 扩展创建 XML 文件的本地副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519797/

相关文章:

javascript - 如何在 Rally 中显示缺陷所有者

javascript - 对 json 进行排序和模式匹配

c++ - 删除cout;删除cin;不要给出编译错误 - 标准库中的缺陷?

c# - 在 C# 应用程序中播放 Raspberry Pi h264 流

Firefox Add-on SDK 及其兼容性?

javascript - Firefox 插件 : XMLHttpRequest minor bug reading JSON

javascript - 使用 Javascript 添加一个类

javascript - 如何比较 Angular ng-class 中的日期

c# - System.IO.Stream 一次性使用阅读器

html - 创建 Firefox 插件以即时修复损坏的网页