打开本地文件时如何绕过document.domain限制?

时间:2009-08-17 16:39:25

标签: javascript html firefox

我有一组使用JavaScript生成导航工具,索引,TOC等的HTML文件。这些文件只能在本地打开(例如,file://)而不能在Web服务器上提供。从Firefox 3.x开始,单击导航按钮时会遇到以下错误:导航按钮会为TOC生成新框架:

Error: Permission denied for <file://> to get property Location.href from <file://>.

据我所知,这是因为FF 3.x中的安全措施不在2.x中,因为document.domain不匹配,因此它假设这是跨站点脚本并且拒绝访问。 / p>

有没有办法解决这个问题?也许只是在Firefox中关闭/打开的开关?有一些JavaScript代码可以解决它吗?

5 个答案:

答案 0 :(得分:1)

在firefox中:

  1. 在地址栏中输入about:config,
  2. 然后在搜索栏中输入 network.automatic-ntlm-auth.trusted-uris
  3. 输入以逗号分隔的列表 服务器(即 内联网,家庭,公司)
  4. 另一种方法是编辑users.js。

    在users.js中,写一下:

    user_pref("capability.policy.policynames", "localfilelinks");
    user_pref("capability.policy.localfilelinks.sites", "http://site1.com http://site2.com");
    user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
    

    但是如果你想停止所有验证,只需将以下行写入users.js文件:

    user_pref("capability.policy.default.checkloaduri.enabled", "allAccess");
    

答案 1 :(得分:1)

你可以在firefox中使用它来读取文件。

function readFile(arq) {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        file.initWithPath(arq);

        // open an input stream from file  
        var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
        istream.init(file, 0x01, 0444, 0);
        istream.QueryInterface(Components.interfaces.nsILineInputStream);  
        var line = {}, lines = [], hasmore;  
        do {  
          hasmore = istream.readLine(line);  
          lines.push(line.value);   
        } while(hasmore);  
        istream.close();  
        return lines;
    }

答案 2 :(得分:0)

Cleiton的方法适用于您自己,或者您期望通过此手动过程的任何用户(除非这是您和您的同事的工具,否则不太可能)。

我希望这种类型的东西能够,因为如果是这样的话,那意味着那里的任何网站都可以开始在我的机器上打开文档并阅读它们的内容。 / p>

答案 3 :(得分:0)

您可以将子文件夹中要访问的所有文件相对于正在执行请求的页面。

您还可以使用JSONP从任何地方加载文件。

答案 4 :(得分:-1)

在about:config

中将“file://”添加到network.automatic-ntlm-auth.trusted-uris