[JS]&[PHP] funktion aus anderem Frame will nicht ausgeführt

Hallo,
ich will aus dem Frame “sync” eine Funktion im anderen Frame “inhalt” ausführen. irgendwie will das aber nicht gehen. Quelltexte:

  • Frameset:

[code]

oC 1.0 alpha Ihr Browser muss Frames akzeptieren.
Ihr Browser muss Javascript akzeptieren. [/code] -client.html [code] Server: Standard-Server wiederherstellen

Name:

Passwort:

 

[/code] -id.php (auf server) [code][/code] Kann jemand den Fehler finden?

Mal abgesehen davon, daß der Quelltext grobe Fehler enthält
(doctype und verwendete Elemente passen nicht zusammen;
body doppelt in einem Dokument etc), kann es vom browser als
Sicherheitsproblem angesehen werden, wenn ein Skript versucht,
auf Dokumente zuzugreifen, die nicht auf derselben (sub)domain
liegen. Offenbar liegt about:blank nirgendwo, sondern ist eine
private interne Abkürzung bei einigen browsern, aber nicht
allgemein definiert und schon gar nicht mit der (sub)domain
verbunden, auf der client.html liegen könnte. Insofern kann es
da bei einigen browsern schon aus Sicherheitsgründen Probleme
geben.
Auch enthält about:blank vermutlich gar kein DOM, also an sich
nichts, worauf das Skript wirken könnte, was weitere Probleme
nach sich ziehen könnte.
Funktioniert das Skript denn bei einer realen Datei mit einem
brauchbaren DOM?

Achso - im action-Attribut von Form sollte wohl auch eine richtige
URI stehen oder ein Fragmentidentifizierer, kein Pseudoprotokoll
zum Skriptaufruf, das Skript wird ja schon mit onsubmit bedient,
ist also bei action sicher überflüssig.

Hi,
die Definition der Funktionen sollte in der HEAD-Umgebung erfolgen.
Grundsätzlich definiere ich erst die Funktion bevor ich sie verwende,
nicht so:

[code]test();
function test(){
if (document.formlogin.server.value == “”){
document.formlogin.server.value = “http://”;
}

[/code]

Pit

Hallo,
ich hab jetzt zum testen mal einen 3. Frame eingebaut. aber auf diesen kann ich auch nicht zugreifen, obwohl die html-dateien im selben ordner liegen. will ich z.B. top.inhalt.std(); ausführen, tut sich nichts.
Und das, was ihr oben geschrieben habt, hilft mir nicht wirklich.
Grüße
michi

[quote=“mirror32”]Hallo,
ich hab jetzt zum testen mal einen 3. Frame eingebaut. aber auf diesen kann ich auch nicht zugreifen, obwohl die html-dateien im selben ordner liegen. will ich z.B. top.inhalt.std(); ausführen, tut sich nichts.
Und das, was ihr oben geschrieben habt, hilft mir nicht wirklich.
Grüße
michi[/quote]

dann must du wohl etwas mehr verraten, was du vorhast. Ich blick da nicht durch.
Eine Funktion aus einem anderen Frame aufrufen funktioniert jedenfalls:
main.html:

[code]

Function in anderen Frame ausführen Ihr Browser muss Frames akzeptieren.
Ihr Browser muss Javascript akzeptieren. [/code]

inhalt.html:

[code]<!doctype html public “-//W3C//DTD HTML 4.0 //EN”>

inhalt

Frame inhalt

Server: [/code]

sync.html:

[code]<!doctype html public “-//W3C//DTD HTML 4.0 //EN”>

sync

Frame sync

test
[/code]

Bei Klick auf den Button im Fenster sync wird das Formularelement in
inhalt gefüllt. Mein sync-frame hat dafür einen Inhalt, was soll
ein leeres Fenster mit top.sync.location.href = ‘about:blank’; ???

Pit

1.) Verzichte auf das Frameset (das rate ich dir wirklich an…macht nur Probleme (JS funzt nicth richtig, auf einmal Navigation weg (beim User), nicht Google-Freundlich, …)
2.) Bemühe dich um einen sauberen/validen HTML-Code

<!DOCTYPE ... >
<html>
<head>
  <title></title>
  <script type="text/javascript">
   /* Hier die Funktionen */
  </script>
</head>
<body>
  <!-- Hier der Body -->
</body>
</html>

3.) verwende nicht so eine komische Mischung aus PHP und JS die iwie aktualisiert werden… entweder nur PHP oder AJAX (ajax.frozenfox.at/)

Das was du da fabriziert hast ist: veraltet (Frames), kann von verschiedenen Browsern enorm unterschiedlich interpretiert werden (JavaScript von Frame zu Frame), ist nicht valid (Falscher DOCTYPE, JS-Funktionen im Body, …), und nicht Benutzerfreundlich (target-Attribut)

ah ok. ich dachte aber, dass man mit HTTPRequest nicht aufs web zugreifen kann, sondern nur auf dateien im selben Ordner. oder wie ist das genau?
greetz
michi

[quote=“mirror32”]ah ok. ich dachte aber, dass man mit HTTPRequest nicht aufs web zugreifen kann, sondern nur auf dateien im selben Ordner. oder wie ist das genau?
greetz
michi[/quote]
Meine Erfahrungen, korrigiert mich wenn ich falsch liege.
Die Ordner spielen keine Rolle, wenn die Dateien unter der selben (Sub)Domain liegen.
Die uri muss dann nur richtig referenziert werden.
Will man jedoch auf eine fremde Domain zugreifen, wird dies allgemein aus
Sicherheitsgründen unterbunden, und das zum Teil ohne
eine Fehlermeldung. Beispiele:

php: allow_url_fopen deaktiviert - Fehlermeldung bei fopen usw.
Ajax - XMLHttpRequest : open wird einfach nicht ausgeführt
Frames und IFrames: Laden + Anzeige möglich, Zugriff auf Objekte im “fremden” Frame wird unterbunden

Mein o.a. Beispiel funktioniert auch nur, wenn sich main.html, inhalt.html und sync.html
in der selben Subdomain bei bplaced befinden !

Fazit: Ich kenne keine Möglichkeit, Leistungen von fremden Servern wie z.B. Webservices
zu nutzen.

Pit

achso ist das also.
das ist natürlich blöd. Die Hauptanwendung sollte nämlich im Browser offline verfügbar sein. Kann jmd die Erfahrungen von pit bestätigen?
greetz
michi

EDIT: PIT hat Recht. Wieso ist diese Funktion denn gesperrt?

Das wird von Server als Sicherheitslücke aufgefasst, dh. man kann es aktivieren (im Browser), sollte man aber nicht

Allerdings kann man die Sperrung mit dem Request-Status erkennen :wink:

wie kann ich dann sonst daten vom Server holen? Wichtig ist mir, das kein Reload der ganzen Seite (halt nur im sync-Frame) reinkommt. Das wäre ja mit Funktionen möglich gewesen.
Greetz
Michi

Hab mich dort verschrieben…wird natürlich vom Browser als Gefährlich eingestuft :wink:
Du kannst dir aber jede Datei aus der gleichen Subdomain holen :wink: Probier es einfach mal aus :wink:

[quote=“michi7x7”]Du kannst dir aber jede Datei aus der gleichen Subdomain holen :wink:[/quote]ja ok, ist ja schön und gut, aber wie gesagt soll die Hauptanwendung ja auch offline verfügbar sein…

Also eine Offline-HTML-Seite, die per Ajax Daten von einem anderen Server holt? Wie schon gesagt kannst du Ajax vergessen, wenn die Hostnamen nicht übereinstimmen, aber vielleicht erlauben das ja manche Browser aus dem file-Kontext, wer weiß…

Und genau deswegen wollte ich das über ein (I-)Frame machen…

Hey Leute, das Javascript nicht auf Objekte in fremden Domains/Subdomains zugreifen kann liegt nicht an der gesperrten PHP-Funktion.
Javascript wird ja am Client ausgeführt und nicht am Server.

[quote=“freggle”]Hey Leute, das Javascript nicht auf Objekte in fremden Domains/Subdomains zugreifen kann liegt nicht an der gesperrten PHP-Funktion.
Javascript wird ja am Client ausgeführt und nicht am Server.[/quote] ähm Hallo? Was hat das jetzt mit dem Thema zu tun? Dass JS auf dem Client ausgeführt wird, weiß so gut wie jeder, der sich ein bisschen im Web auskennt und die, die in JS schreiben sowieso. Von PHP ist hier eigentlich nicht die Rede.
Sorry, dass der Post jetzt sehr aggressiv ist, aber das, was Du geschrieben hast ist irgendwie vollkommen sinnlos.
Grtz
michi

Entweder wurde der unsinnige Post auf den ich mich bezog editiert oder gelöscht.
Auf jeden Fall hat jemand was von allow_url_fopen und den Socket-Funktionen geschwafelt.

So unsinnige und unzusammenhängende Antworten schreibe ich für gewöhnlich nicht.
Werde in Zukunft aber sicherheitshalber den Scheiß anderer zitieren.

Jetzt ist mir gerade eine Idee, gekommen, wie ich evtl. einen Text übertragen könnte: document.title. Funktioniert aber auch nicht. Fehlermeldung:

[quote]Fehler: uncaught exception: Die Erlaubnis für das Lesen der Eigenschaft HTMLDocument.title wurde verweigert[/quote] Gibt es eine Möglichkeit, das zu umgehen?
Ich hatte schon vor, mit Cookies zu arbeiten, aber die sind mir persönlich zu kompliziert. Gibt es auch eine andere Möglichkeit? (z.B. Session…)
grtz
michi

Sessionvariablen sind von php und werden abgesehen davon auch mit Cookies zugeordnet.

Cookies kannst du genausowenig benutzen, da auch die vom Browser auf die eigene Subdomain beschränkt werden.

Warum musst du die Funktion denn aus dem anderen Frame aufrufen?