Abrufen eines Elements innerhalb von Frame mithilfe von jQuery

Lesezeit: 3 Minuten

Ich versuche, auf ein Element zuzugreifen, das sich innerhalb eines Frames befindet, hatte aber bisher kein Glück, es zu erreichen. Ich habe hier auf Stackoverflow und in der jQuery-Dokumentation viele Beispiele durchgelesen, aber alle Beispiele, die ich gesehen habe, beziehen sich auf iFrames, die sich anders verhalten als herkömmliche Frames. Meine Seitenstruktur ist wie unten gezeigt, wobei die tatsächlichen Inhalte entfernt wurden:

<html>
<head></head>
<frameset>
<frame name="Menu"><html><body>
    <!--Menu contents-->
</body></html></frame>

<frameset>
<frame name="SettingsTree"><html><body>
    <!--Setting options-->
</body></html></frame>
<frame name="SettingsGrid" id="SettingsGrid"><html><body>
    <div id="findthis"></div>
    <!--Setting grid values-->
</body></html></frame>
</frameset>

</frameset>
</html>

Der Weg, um Inhalte von “findthis” innerhalb eines iFrames zu erhalten, wäre

$('#SettingsGrid').contents().find('#findthis')

das bringt aber nichts zurück. Das $(‘#SettingsGrid’)-Objekt existiert mit einer Länge von 1 und dem gesamten HTML-Code, den ich erwarten würde. Wenn ich jedoch .contents() für dieses Objekt aufrufe, gibt es nichts zurück. Ich weiß nicht, ob dies daran liegt, dass es nicht richtig in das DOM geladen wurde, oder ob es ein anderes Problem gibt.

Benutzer-Avatar
dgilland

Versuche dies:

$('#findthis', window.parent.frames[0].document)

Oder von der obersten Ebene:

$('#findthis', top.window.frames[0].document)

Siehe vorherige Frage/Antwort: Führen Sie JQuery im Kontext eines anderen Frames aus

  • Firebug sag mir: Error: Permission denied to access property 'document'

    – Sündedrix

    3. Juni 2014 um 15:10 Uhr


Benutzer-Avatar
James Drinkard

Das hat bei mir funktioniert, wenn der Frame sowohl einen Namen als auch eine ID hat:

$('#frame_id',top.frames["frame_name"].document) ...

Meine beste funktionierende Lösung im IE8 / IE11 Enterprise-Modus mit jQuery 1.11.1 ist:

$('#findthis', $('#SettingsGrid')[0].contentWindow.document)

Hast du es versucht $('#findthis', $('#SettingsGrid')) ?

Das zweite Argument innerhalb der äußeren jquery ist der Kontext, in dem die Suche durchgeführt werden soll, auf die sich das erste Argument bezieht. Wenn kein zweites Argument angegeben wird, ist es standardmäßig die Wurzel.

Benutzer-Avatar
Karl

Für mich war dies ein guter Weg, einen Frame nach Klasse zu finden und dann die prop () -Methode und das Inhaltsfenster von jquery zu verwenden. Leider muss in diesem Frame eine Funktion deklariert werden, die eine Aufgabe für Sie erledigt, z. B. die Methode findAndsubmitForms().

übergeordnetes Fenster:

$('.frameClass or #id or so').prop('contentWindow').findAndSubmitForms();

untergeordnetes Fenster (Rahmen):

function findAndSubmitForms(){
    $('form').submit();
    }

Wenn dies nicht möglich ist, eine solche Methode innerhalb des Rahmens zu deklarieren, könnte dies natürlich so erfolgen, dass sie wie folgt definiert wird:

$('.frameClass').prop('contentWindow').findAndSubmitForms=function(){...};

und rufen dann unsere gewünschte Funktion auf :d

Ich wünsche Ihnen einen schönen Tag und viel Spaß beim Betrachten des Bildschirms 😀

1055920cookie-checkAbrufen eines Elements innerhalb von Frame mithilfe von jQuery

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy