6 Stimmen

Wie lassen sich die Beschränkungen von document.domain beim Öffnen lokaler Dateien umgehen?

Ich habe eine Reihe von HTML-Dateien, die JavaScript verwenden, um Navigationstools, Indexierung, TOC usw. zu generieren. Diese Dateien sollen nur lokal geöffnet werden (z. B. file://) und nicht auf einem Webserver bereitgestellt werden. Seit Firefox 3.x tritt folgender Fehler auf, wenn man auf eine Navigationsschaltfläche klickt, die einen neuen Rahmen für das Inhaltsverzeichnis erzeugen würde:

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

Ich verstehe, dass dies auf Sicherheitsmaßnahmen in FF 3.x zurückzuführen ist, die es in 2.x nicht gab, da die document.domain nicht übereinstimmt, so dass angenommen wird, dass es sich um Cross-Site-Scripting handelt und der Zugriff verweigert wird.

Gibt es eine Möglichkeit, dieses Problem zu umgehen? Vielleicht nur ein Schalter zum Ein- und Ausschalten in Firefox? Ein bisschen JavaScript-Code, um das Problem zu umgehen?

1voto

Cleiton Punkte 16549

In Firefox:

  1. Geben Sie in der Adressleiste about:config ein,
  2. dann tippen Sie network.automatic-ntlm-auth.trusted-uris in der Suchleiste
  3. Geben Sie eine durch Komma getrennte Liste von Servern ein (z. B., Intranet, Zuhause, Firma)

Eine andere Möglichkeit ist die Bearbeitung der users.js.

In users.js, schreiben:

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");

Wenn Sie jedoch die gesamte Überprüfung stoppen möchten, schreiben Sie einfach die folgende Zeile in die Datei users.js:

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

1voto

Topera Punkte 11809

Sie können dies in Firefox verwenden, um die Datei zu lesen.

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;
    }

0voto

TM. Punkte 101846

Die Methode von Cleiton funktioniert für Sie selbst oder für alle Benutzer, von denen Sie erwarten, dass sie diesen manuellen Prozess durchlaufen (was unwahrscheinlich ist, es sei denn, es handelt sich um ein Tool für Sie und Ihre Kollegen oder so).

Ich würde hoffen, dass diese Art von Dingen no Denn wenn dies der Fall ist, bedeutet dies, dass jede beliebige Website damit beginnen könnte, Dokumente auf meinem Rechner zu öffnen und deren Inhalt zu lesen.

0voto

Justin Meyer Punkte 1647

Sie können alle Dateien, auf die Sie zugreifen wollen, in Unterordnern relativ zu der Seite, die die Anfrage stellt, ablegen.

Sie können auch JSONP verwenden, um Dateien von überall her zu laden.

-1voto

lukemabat Punkte 1

Hinzufügen von "file://" zu network.automatic-ntlm-auth.trusted-uris in about:config

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X