2010-05-28 20 views
36

Próbowałem tego już od jakiegoś czasu i przyjrzałem się innym odpowiedziom na podobne pytania na SO, ale kiedy próbuję zmienić atrybut src iframe, to aktualizuje go dla całego okno. Oto następujący kod używam, że działa poprawnie (nie jQuery):Zmieniając źródło iframe z jquery

<html> 
<head> 
<style type="text/css"> 
iframe#ifrm { 
    border:none; 
    padding:.5em; 
    margin:1.5em 0 1em; 
    width:100%; 
    height:100%; 
} 
</style> 
<script src="./js/jquery-1.4.2.js" type="text/javascript"></script> 
<script type="text/javascript"> 
// <![CDATA[ 
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    // this is the function I'm trying to replace: 
    function loadIframe(iframeName, url) { 
    if (window.frames[iframeName]) { 
     window.frames[iframeName].location = url; 
     return false; 
    } 
    return true; 
} 
// ]]> 
</script> 
</head> 

<body> 
<ul> 
<li><a href="http://www.google.com/" onclick="return loadIframe('ifrm', this.href)">Page 1</a> </li> 
<li><a href="tabs.html" onclick="return loadIframe('ifrm', this.href)">Page 2</a></li> 
</ul> 
<div class="iframe"> 
<iframe name="ifrm" id="ifrm" src="tabs.html" frameborder="0"> 
Your browser doesn't support iframes.</iframe> 

Jak powiedziałem, próbowałem

$('#ifrm').attr('src', "http://www.google.com") 

który wyświetla stronę, ale nie w iframe. Jestem naprawdę tylko nauka jQuery, ale nie mogę dowiedzieć się, co różni się o mojej sytuacji niż inne podobne pytania jak to:

Jquery and iFrame update

Dzięki.

+0

można wspomnieć, że wyświetla stronę, ale nie w iframe, jesteś pewna, że ​​to kwestia jQuery i CSS nie problem? Być może możesz włączyć ramki, aby sprawdzić, czy ramka zmienia wymiary podczas ładowania nowej strony. – Mayo

Odpowiedz

91

Powinien działać.

Oto przykład praca:

http://jsfiddle.net/rhpNc/

function loadIframe(iframeName, url) { 
    var $iframe = $('#' + iframeName); 
    if ($iframe.length) { 
     $iframe.attr('src',url); 
     return false; 
    } 
    return true; 
} 
2

Korzystanie attr() skierowaną do domeny zewnętrznej może wywołać błąd podobny do tego w Chrome: „Odmowa wyświetlenia dokumentu, ponieważ wyświetlacz zabronione przez X -Frame-Opcje ". Obejściem tego może być przeniesienie całego kodu HTML iframe do skryptu (np. Użycie .html() w jQuery).

Przykład:

var divMapLoaded = false; 
$("#container").scroll(function() { 
    if ((!divMapLoaded) && ($("#map").position().left <= $("#map").width())) { 
    $("#map-iframe").html("<iframe id=\"map-iframe\" " + 
     "width=\"100%\" height=\"100%\" frameborder=\"0\" scrolling=\"no\" " + 
     "marginheight=\"0\" marginwidth=\"0\" " + 
     "src=\"http://www.google.it/maps?t=m&amp;cid=0x3e589d98063177ab&amp;ie=UTF8&amp;iwloc=A&amp;brcurrent=5,0,1&amp;ll=41.123115,16.853177&amp;spn=0.005617,0.009943&amp;output=embed\"" + 
     "></iframe>"); 
    divMapLoaded = true; 
} 
Powiązane problemy