2 Stimmen

Aufruf einer JavaScript-Funktion von einem Frame zum anderen in Chrome/Webkit mit Dateiprotokoll

Ich habe eine Anwendung entwickelt, die eine Liste von Elementen in einem Rahmen enthält; wenn man auf ein Element klickt, wird etwas in einem anderen Rahmen getan (ein Bild geladen).

Früher funktionierte das in allen Browsern, auch in Chrome 3; jetzt funktioniert es noch in Firefox, aber in neueren Versionen von Chrome (ich glaube seit 4) tritt dieser Fehler auf:

Unsicherer JavaScript-Zugriffsversuch auf Frame mit URL (...) von Frame mit URL (...). Domains, Protokolle und Ports müssen übereinstimmen.

Dies ist offensichtlich ein Sicherheitsmerkmal", aber ist es möglich, es zu umgehen?

Hier ist ein einfacher Test:

index.html:

<html>
  <frameset cols="50%,50%">
    <frame src="left.html" name="left"/>
    <frame src="right.html" name="right"/>
    </frameset>
  </html>

links.html:

<html>
  <body>
    <a href="javascript:parent.right.test('hello');">click me</a>
    </body>
  </html>

rechts.html:

<html>
  <body>
    <script>
      function test(msg) {
        alert(msg);
        }
      </script>
    </body>
  </html>

Das oben genannte funktioniert in Firefox 3.6 und Chrome 3, aber in Chrome 5 wirft es den oben genannten Fehler...

Edit :

  • Hinzufügen des Attributs @cols zum Frameset-Element
  • in der Tat funktioniert es in Chrome, wenn und nur wenn die Seiten mit dem http-Protokoll (und von der gleichen Domain) serviert werden, aber mein Problem ist, wenn die Seiten lokal sind und von einem file:// Protokoll geliefert werden . Dann funktioniert es in Firefox (alle Versionen) und Chrome 3, aber nicht in Chrome 5 (ich habe Chrome 4 nicht, also bin ich mir nicht sicher, was diese spezielle Version angeht (und weiß nicht, ob es überhaupt möglich ist, eine spezielle Chrome-Version herunterzuladen) - aber bei Chrome 5 bin ich mir sehr sicher, dass es nicht funktioniert).

1voto

T.J. Crowder Punkte 948310

Ich habe Ihre Testseiten ausprobiert, und sie funktionieren gut mit Chrome 4.1.249.1045 unter Windows (und Firefox 3.6.3 und IE7 (nach Behebung des Problems unten) ). Ich stimme also mit Pekka überein (wie immer): Ich denke, das Problem muss woanders liegen.

Im IE7 funktionierte es nicht, und ich habe ewig gebraucht, um herauszufinden, warum das so ist: Sie müssen entweder rows ou cols über die frameset Tag, sonst lädt der IE nur den einen Frame. (Der Prüfer hätte mir das gesagt, wenn ich danach gefragt hätte.)

1voto

M. Anthony Aiello Punkte 1034

Siehe die Antworten auf die eng verwandte Frage: Aufruf einer in einem iframe definierten JavaScript-Funktion in Chrome über das Dateiprotokoll .

Kurz gesagt, der Start von Chrome mit --allow-file-access-from-files "löst" das Problem insofern, als der Fehler nicht gemeldet wird.

Da Sie die Dateien auf einer CD verteilen, werden Sie dies wahrscheinlich nicht als echte Lösung betrachten. Ich empfehle, den Stern Chromium-Fehler 47416 um die Entwickler von Chromium zu ermutigen, Chrome mehr an das Verhalten von Gecko anzupassen.

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