• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Elemente in Frame ansprechen

Status
Für weitere Antworten geschlossen.

Jabor

Neues Mitglied
Hallo html.de-Community,

ich habe folgendes Problem:

Ich erstelle zur Laufzeit von meiner HTML-Seite - in einen der 3 eingebetteten Frames IN DIESER Hauptseite - Links.
Das funktioniert sehr gut.
Nun möchte ich aber in einer Script-Funktion auf einen dieser Links, die anhand ihrer IDs eindeutig sein müssten, zugriefen und einen Klick auf ihn simulieren.

Das mache ich mit
Code:
eval(document.getElementById(ID).click);

Nur wie spreche ich jetzt den Link an, er befindet sich ja in dem Frame?
Vielen Dank schonmal...
 
Das ist in jedem Fall etwas für das JavaScript-Forum.

Du kannst auf das Window-Objekt des Frames mit document.getElementById("derframe").contentWindow zugreifen. Dann kannst du normal mit dem Document-Objekt arbeiten, aber das nur, wenn die Domain gleich ist. Sonst ist der Zugriff aus Sicherheitsgründen gesperrt.

Ich sehe kaum einen Sinn darin einen Klick zu simulieren. click() funktioniert nur im IE. eval() ist sogar missbilligt und sollte in keinem Fall benutzt werden. DOM definiert das so: event.initMouseEvent - MDC
 
Ich wusste nicht genau wo der Fehler lag (dachte bei den Frames, habe har nicht an Zugriffsberechtigungen gedacht), deshalb habe ich das HTML-Forum genommen, sry...

Vielen Dank für deine Antwort!
Also mit dem IE funktioniert deine Variante perfekt, aber der FF...

Wie ich das auf den ersten Blick sehe, kann man mit initMouseEvent ja nur einen Klick simulieren, aber ich will ja einen Klick auf diesen Link.
Muss ich dann erst die X- und Y-Koordinaten auf den Link richten oder wie geht das damit?

EDIT: Oh sry, auf den zweiten Blick habe ich dann die CheckBox entdeckt xD THX!
 
So ich habe jetzt folgenden Code:

Code:
function SimulateClick(MyID)
{
         var evt = document.createEvent("MouseEvents");
         evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
          var cb = document.getElementById("MyFrame").contentWindow.document.getElementById(MyID); 
          var canceled = !cb.dispatchEvent(evt);
        if (canceled)
        {
            alert("Cancled!");
        }
}

Angepasst an mein Problem wäre das denn dieser Code, nur funktioniert er nicht.
Habe ich da wieder was nicht beachtet wegen Zugriffsrechten etc.?? O.o
 
IE hat ein anderes Event-Interface als Firefox und Co.: JavaScript tutorial - DOM events

Beispiel de Seite:
Code:
var fireOnThis = document.getElementById('someID');
if( document.createEvent ) {
  var evObj = document.createEvent('MouseEvents');
  evObj.initEvent( 'mousemove', true, false );
  fireOnThis.dispatchEvent(evObj);
} else if( document.createEventObject ) {
  fireOnThis.fireEvent('onmousemove');
}
 
Ah, vielen Dank!

Ich komme dann zu folgendem Ergebnis:

Code:
            var fireOnThis = document.getElementById("PlaylistFrame").contentWindow.document.getElementById(SongID);
            if( document.getElementById("PlaylistFrame").contentWindow.document.createEvent ) 
            {
                var evObj = document.getElementById("PlaylistFrame").contentWindow.document.createEvent('MouseEvents');
                  evObj.initEvent( 'click', true, false );
                  fireOnThis.dispatchEvent(evObj);
            } 
            else if( document.getElementById("PlaylistFrame").contentWindow.document.createEventObject ) 
            {
                fireOnThis.fireEvent('onclick');
            }

Funktioniert aber leider immer noch nicht, nur beim IE - dank einer Browserweiche die ich eingebaut habe mit der Methode die du als erstes gepostet hast.
Irgendetwas übersehe ich ...!
 
Code:
var frameDoc = document.getElementById("PlaylistFrame").contentWindow.document;
var element = frameDoc.getElementById(SongID);
if (document.createEvent) {
    var evObj = frameDoc.createEvent("MouseEvents");
    evObj.initEvent("click", true, false);
    element.dispatchEvent(evObj);
}
else if(document.createEventObject)  {
    element.fireEvent("onclick", frameDoc.createEventObject());
}
nicht getestet.
 
Erstmal vielen Dank für deine Hilfe!
Es funktioniert zwar nicht, aber hoffentlich wird sich das ändern ^^

Code:
if (document.createEvent) {
[...]
}
...

Muss dass dann nicht auch

Code:
if (frameDoc.createEvent) {...

heißen, denn das Event soll ja in diesem Frame ausgelöst werden?
Nur selbst MIT dieser Anpassung (wenn sie denn überhaupt richtig ist) funktioniert es nicht...
Nur der IE mit der .click läuft 1a :/
 
Das dient nur zur Unterscheidung, um welchen Browser es sich handelt. Ob nun document, oder frameDoc ist egal, denn beides sind Document-Objekte.

Gibt denn element.fireEvent("onclick", frameDoc.createEventObject()); true oder false zurück?
 
Mit

Code:
var frameDoc = document.getElementById("PlaylistFrame").contentWindow.document;
var element = frameDoc.getElementById(SongID);
if (element.fireEvent("onclick", frameDoc.createEventObject()) == true)
            {
                alert("Jo!");
            }

gibt es "false" zurück...
 
Tja, .click() klappt allerding nach meinen Infos nur im IE, nicht bei FF & CO.
Jedenfalls habe ich das getestet, und nur der IE kriegt das mit .click() im meinen Frames hin -.-
Zum Scheitern verurteilt ?!
 
Moment, der DOM-Weg funktioniert? O.o
Das .click() funktioniert beim IE, aber bis jetzt hat noch nichts im FF geklappt (Opera, Safari etc nicht getestet) auch nicht mit dem DOM Weg, das war ja das was du hier gepostet hast, das funktioniert ja leider nicht...
 
Code:
var evObj = frameDoc.createEvent("MouseEvents");
evObj.initEvent("click", true, false);
element.dispatchEvent(evObj);
Das war der "DOM-Weg" so wie es Standardisiert ist. Das andere war IEs proprietäres Event-Interface. Und das funktionierte ja in den anderen Browsern. Warum kombinierst du das also nicht mit click()?
 
Moment, moment, bitte langsam...
Mit dem IE verwende ich das click(), das ist klar, habe ich auch schon vorher gemacht, seit dem ich von dir weiß wie man auf die Objekte in den Frames zugreifen kann, aber ich habe ja die ganze Zeit nach der Lösung für FF & Co. gesucht...
Und das DOM-Standardisierte - was ausgeführt wird bei allen browsern außer dem IE - hatte ich folgendermaßen in meinen Code eingebaut:
Code:
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("PlaylistFrame").contentWindow.document.getElementById(SongID); 
var canceled = !cb.dispatchEvent(evt);
if (canceled)
{
     alert("Cancled!");
}

Hat aber nicht funktioniert, obwohl ich wie auf dieser DOM-Seite die du gepostet hattest extra die genaue und nicht die generierte Variante verwendet habe, beim initMouseEvent...
Oder hab ich da einen Fehler drin?
 
Nein, ich erklär das ganze drumherum mal:

Ich habe eine Seite.html mit Überschrift, nem Formular mit Edit-Feld also Text-Input und nem Button.
In der Seite im Script-Part sind mehrer Funktionen von mir geschrieben.
In dieser Seite sind 3 eingebetteten Frames (<iframe>...</iframe>), jedes mit title, id und genauer Größenangabe.
Der Button bewirkt über eine Funktion, dass in ein Frame Code geschrieben wird - zur Laufzeit - und erstellt so Links.
Diese Links haben in den onclicks Funktionen eingetragen.
ALLE Funktionen sind in meiner Seite.html!!!
Durch das onclick werden die Funktionen ausgeführt (das ist bestätigt!).
Die Links haben als Target ein anderes Frame.
Das alles funktioniert sehr gut, die Links werden generiert, die Links werden in dem zweiten Frame geöffnet usw, aber ich möchte nun auch diese onlciks auslösen ohne dass man darauf klickt.
Im IE klappt das sehr gut, nur in FF & Co. geht das halt nicht mit .click()...die Geschichte kennt ihr ja bereits ^^

-> Meine Frames sind NICHT extern...
 
Nun, weil ich dann nicht die target-Eingenschaft der Links ausnutzen kann.
Ich möchte ja, dass sich der Link in dem zweiten Frame öffnet und das habe ich mit den target-Eigenschaften der Links bewerkstelligt.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben