如何在javascript中使用component.classes来访问本地文件?

时间:2013-09-03 03:51:52

标签: javascript firefox-addon

我尝试了一个解决方案,通过这个函数读取在Firefox中写一个本地文件

function Read(file) {
    var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
    var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"].getService(Components.interfaces.nsIScriptableInputStream);
    var channel = ioService.newChannel(file, null, null);
    var input = channel.open();
    scriptableStream.init(input);
    var str = scriptableStream.read(input.available());
    scriptableStream.close();
    input.close();
    return str;
}

但在firefox中,执行退出var ioService=Components.classes["@mozilla.org/network/io-service;1"]。请告诉我们如何使用此代码。我需要安装任何插件吗?我使用的是FF版本23.0.1。我是新来的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

想象一下,如果Internet上的任何网页都可以读取本地文件系统上的任何文件。如果可能,那么恶意程序员很容易从我们那里窃取私人信息。幸运的是,运行HTML页面的Web浏览器无法直接执行此操作。

如果您出于合法原因需要阅读用户计算机上的文件,则可以使用HTML5 File API。但是,这会有所不同,因为它需要用户首先选择 XML文件,然后才能阅读它。也许你的页面可以给他们指示,以便他们知道如何找到正确的文件。

如果您必须同时读写文件,那么您将不得不使用与HTML + JS不同的技术。一个特定于Mozilla的选项是您编写XUL application。您使用其专有XPCOM系统的上述JavaScript代码将在XUL应用程序中执行,前提是它具有正确的权限。如果这是您想要的路线,MDN有一些很好的资源。

如果您不想深入了解XUL,可以使用任意数量的脚本语言或桌面应用程序开发工具,并让用户在桌面上运行。在不知道你需要做什么的具体细节的情况下,我只能给你这个通用答案。

我希望这会有所帮助。对不起,您将不得不放弃目前的做法。