2012-07-25 6 views
7

Ich versuche den Inhalt eines Iframe zu ändern, aber es funktioniert nicht.Kann Inhalt von iframe nicht ändern, was ist falsch?

Das ist mein main.html ist

<html> 
<head><title>Main page</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
</head> 
<body> 

<h3>Main page</h3> 
<iframe src="ifr.htm" id="ifr" name="ifr"></iframe> 
</body> 

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

</script> 
</html> 

Dieses ifr.htm meine ist

<html> 
<head><title>Iframe page</title></head> 
<body> 
Content to be displayed in iframe ... 
</body> 
</html> 
+0

Ein Iframe ist unabhängig von dem Frame, der es anzeigt. Um Änderungen (Stile/Inhalt/usw.) auf die iFrame-Seite anzuwenden, müssen Sie diese Seite bearbeiten. Wenn Sie diese Seite bearbeitet haben, aber die Änderungen nicht sehen, müssen Sie wahrscheinlich nur den Cache für diese Seite löschen. Besuchen Sie die iframe-Seite direkt und klicken Sie auf Aktualisieren, bis Sie die Änderung sehen – ckaufman

+0

können Sie näher auf "funktioniert nicht"? Hast du irgendwelche Fehler? – jbabey

+0

[Es funktioniert hier] (http://jsfiddle.net/heera/HuuMZ/1/), Inhalt wird geändert. –

Antwort

13

Bitte vergessen Sie nicht die cross-domain Richtlinie, sonst wird es nicht funktionieren.

Live-Demo:http://jsfiddle.net/oscarj24/wTWjF/

(nur zu wissen, ich bin nicht eine 404-Seite verwenden, werfen Sie einen Blick)

Versuchen Sie folgendes:

$(document).ready(function(){ 
    $('#ifr').ready(function(){ 
     $(this).contents().find('body').html('Hey, I have changed content of <body> Yay!'); 
    }); 
});​ 
2

Sie ehren die domänenübergreifende Politik Unter der Annahme, das klingt wie ein Timing-Problem. Es ist wahrscheinlich, dass Ihr iframe bereits geladen wurde, wenn die document.ready der übergeordneten Seite ausgelöst wird.

Sie könnten versuchen, Ihre frame.load zu frame.ready als .ready wird sofort ausgelöst, wenn es gebunden ist, nachdem das Ereignis bereit bereits ausgelöst hat.

+0

Das klingt auch plausibel. –

+0

versucht, aber es funktioniert nicht. – Slay

+0

Es muss funktionieren! hier ist ein Beispiel http://jsfiddle.net/MBjjR/ – mabbas

1

Sie tun würden, etwas wie dieses:

Sie setzen die src attri bute von Ihrer iFrame auf eine leere Seite (blank.htm) oder "", dann in der Bereit-Handler ändern Sie die src zu ifr.htm.

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