2.3k Aufrufe
Gefragt in Webseiten HTML von kicia Mitglied (939 Punkte)
guten Tag,

in googles chrome browser kann ich nicht mit JS von einem frame auf einen anderen zugreifen, wenn die dateien lokal gespeichert sind (file:// protokoll).

Ist das ein Fehler ? Ist das _mein_ Fehler ? Gibt's dafür ein workaround?

Meldung:
"unsafe javascript attempt to access frame... domains, protocols and ports must match"

Über HTTP protokoll funktionierts.
In IE7, FF3.6, Opera10 funktionierts über FILE und HTTP.

---- Frameset: ----

<html>
<head>
<TITLE>chrome test</TITLE>
</head>
<frameset cols="20%,*">
<frame name="frameA" src="./chrometest_A.html">
<frame name="frameB" src="./chrometest_B.html">
</frameset>
</html>


---- Seite A: ----

<html>
<head>
<title>frame A</title>
<script type="text/javascript">
function init()
{
alert( parent.frameB.location );
}
</script>
</head>
<body onLoad="init()">
(frame A)
</body>
</html>


---- Seite B: ----

<html>
<head>
<title>frame B</title>
</head>
<body>
(frame B)
</body>
</html>


Sonstiges:
Die Anwendung ist ein Seitenmenü, mit dem im Hauptframe verschiedene Seiten geladen werden.
Lokal ist nötig, denn die Seiten werden auch als CD geliefert.
Die verwendung von Frames ist vom Kunden vorgegeben.

Gruß, Kicia

5 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
kleine korrektur, bevors jemand anderes merkt:
frameB muss hier im frameset natürlich über frameA stehen, sonst ist es nicht geladen, wenn frameA darauf zugreift.

Aber das macht für das eigentliche Problem keinen Unterschied.
0 Punkte
Beantwortet von
nutze einfach einen lokalen Server
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
nutze einfach einen lokalen Server

wie gesagt, die Seiten werden als CD geliefert.
0 Punkte
Beantwortet von
ok, deine Schlussbemerkungen hatte ich übersehen.

Was ist der Sinn der Aktion, dass du per JS auf die Seite zugreifst? Evtl. lässt sich das ja auch anderes erreichen und das Chrome-Problem so umgehen. Letzteres kann ich schon deshalb nicht nachvollziehen, dass ich google-Produkte bei mir nicht installiere. Gilt es auch für andere Browser mit Webkit-Engine (zB. Safari)?
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
hallo gast_42,

Danke für die Antwort. Ich glaube inzwischen, mein Problem ist nicht lösbar (siehe unten), ich werde mir anders helfen, wenn sich nichts neues ergibt.

Trotzdem zu Deiner Frage:

Das Javascript ist ein Menü, das im Hauptframe die Seiten wechselt, wie die Lesezeichen in PDF. Die Kapitel werden im Menü entsprechend der angezeigten Seite eingeblendet und hervorgehoben.

Andere Webkit Browser habe ich nicht getestet, sorry. Würde mich auch interessieren, aber da gibts ein paar betriebsinterne Hürden, was Softwareinstallationen angeht.

Chrome schmeisst übrigens leider nichtmal eine exception, so daß mein Script ziemlich unelegant abbricht.

Meine Recherchen:

Das Problem (JS zugriff von frame zu frame bei lokalen URI) scheint erst seit Version 4 oder 5 zu bestehen, weil eine Sicherheitslücke geschlossen wurde.
Ob Chrome es nicht elegant hingekriegt hat oder aber einfach sicherer ist als die anderen, ist mir noch unklar.

Es funktioniert in Chrome mit Kommandozeilenparameter "allow-file-access-from-files", aber das kann ich ja von Kunden nicht erwarten. Ausserdem wird vermutlich damit die vorige Sicherheitslücke wieder geöffnet.

Quellen und weitere Info:
src.chromium.org/viewvc/chrome?view=rev&revision=39287
blog.chromium.org/2008/12/security-in-depth-local-web-pages.html
stackoverflow.com/questions/2570718/how-to-call-a-javascript-function-from-one-frame-to-another-in-chrome-webkit-with


Gruß, kicia
...