858 Stimmen

Wie kann ich mit JavaScript/jQuery auf den Inhalt eines iframe zugreifen?

Ich möchte den HTML-Code innerhalb eines iframe mit jQuery manipulieren.

Ich dachte, ich wäre in der Lage, dies zu tun, indem Sie den Kontext der jQuery-Funktion, das Dokument des iframe, etwas wie sein:

$(function(){ //document ready
    $('some selector', frames['nameOfMyIframe'].document).doStuff()
});

Dies scheint jedoch nicht zu funktionieren. Ein wenig Inspektion zeigt mir, dass die Variablen in frames['nameOfMyIframe'] sind undefined es sei denn, ich warte eine Weile, bis der iframe geladen ist. Wenn der iframe jedoch geladen wird, sind die Variablen nicht zugänglich (ich erhalte permission denied -Typ-Fehler).

Kennt jemand eine Lösung für dieses Problem?

3 Stimmen

Was enthält der iFrame - ist sein src auf einen anderen Bereich festgelegt?

0 Stimmen

Wenn es sich um einen anderen Bereich handelt, gibt es dann noch eine Möglichkeit, auf dessen Inhalt zuzugreifen oder ein Ereignis zu registrieren?

38 Stimmen

Nein, denn das wäre ein Cross-Site-Scripting, das aus Sicherheitsgründen verboten ist. Meine Lösung war die Verwendung eines Proxys: Ich habe den HTML-Code im IFRAME wortwörtlich über meine eigene Website eingespeist, so dass er aus Sicht des Browsers nicht mehr seitenübergreifend ist.

1033voto

Yasir Laghari Punkte 10566

Wenn die <iframe> aus demselben Bereich stammt, sind die Elemente leicht zugänglich als

$("#iFrame").contents().find("#someDiv").removeClass("hidden");

Referenz

404voto

Onur Bebin Punkte 4271

Ich denke, was Sie tun, unterliegt den Politik des gleichen Ursprungs . Dies sollte der Grund sein, warum Sie die Art der verweigerten Erlaubnis Fehler.

100voto

davryusha Punkte 961

Sie könnten verwenden .contents() Methode von jQuery.

El .contents() Methode kann auch verwendet werden, um das Inhaltsdokument eines iframe zu erhalten, wenn sich der iframe auf derselben Domain wie die Hauptseite befindet.

$(document).ready(function(){
    $('#frameID').load(function(){
        $('#frameID').contents().find('body').html('Hey, i`ve changed content of <body>! Yay!!!');
    });
});

47voto

basysmith Punkte 489

Wenn der iframe src von einer anderen Domain stammt, können Sie es trotzdem tun. Sie müssen die externe Seite in PHP einlesen und als Echo von Ihrer Domain wiedergeben. Etwa so:

iframe_page.php

<?php
    $URL = "http://external.com";

    $domain = file_get_contents($URL);

    echo $domain;
?>

Dann etwas in dieser Art:

anzeige_seite.html

<html>
<head>
  <title>Test</title>
 </head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

<script>

$(document).ready(function(){   
    cleanit = setInterval ( "cleaning()", 500 );
});

function cleaning(){
    if($('#frametest').contents().find('.selector').html() == "somthing"){
        clearInterval(cleanit);
        $('#selector').contents().find('.Link').html('ideate tech');
    }
}

</script>

<body>
<iframe name="frametest" id="frametest" src="http://yourdomain.com/iframe_page.php" ></iframe>
</body>
</html>

Das obige Beispiel zeigt, wie man eine externe Seite über einen iframe bearbeiten kann, ohne dass der Zugriff verweigert wird...

36voto

user Punkte 349

Verwenden Sie

iframe.contentWindow.document

anstelle von

iframe.contentDocument

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