JQuery ile bir iframe içeriğine nasıl erişilir?


116

JQuery ile bir iframe içeriğine nasıl erişebilirim? Bunu yapmayı denedim ama işe yaramadı:

iframe içeriği: <div id="myContent"></div>

jQuery: $("#myiframe").find("#myContent")

Nasıl erişebilirim myContent?


Jquery / javascript'e benzer : bir iframe içeriğine erişmek, ancak kabul edilen cevap aradığım şey değildi.


Az önce Firefox konsolundaki yerleşik $ değişkeninin tam bir jQuery gibi görünmediğini buldum. (Bunu jQuery değişkenine de sahip olmadığımı anladıktan sonra jQuery'nin kaynak kodunu yüklemediğimi anladım).
yılan balığı ghEEz

Yanıtlar:


214

Şu contents()yöntemi kullanmalısınız :

$("#myiframe").contents().find("#myContent")

Kaynak: http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/

API Dokümanı: https://api.jquery.com/contents/


3
bana hata ver: Hata: 'ownerDocument' özelliğine erişim izni reddedildi
Imran Khan

26
ime: Muhtemelen aşağıdaki nedenlerden dolayı size hata veriyor: 1) Iframe aynı etki alanına ait değil. 2) Iframe yükleme olayından önce okumaya çalışıyorsunuz.
iMatoria

1
Erişmeye çalışmadan ve bir hata almadan önce, iframe içeriğinin aynı alandan olup olmadığını doğrulamanın bir yolu var mı?
Kamafeather

2
Kaynak url bozuk.
karthzDIGI

1
@jperezmartin: Ana sayfa ile iframe arasında bilgi aktarımı yapacak bazı javascript kitaplığı kullanmanız gerekecek. Temel olarak, Cross Browser işlevselliği nedeniyle tarayıcı tarafından reddedildi. Üzgünüm, böyle bir kütüphaneden haberdar değilim çünkü ona hiç ihtiyacım olmadı.
iMatoria

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

$(function() {

    //here you have the control over the body of the iframe document
    var iBody = $("#iView").contents().find("body");

    //here you have the control over any element (#myContent)
    var myContent = iBody.find("#myContent");

});

</script>
</head>
<body>
  <iframe src="mifile.html" id="iView" style="width:200px;height:70px;border:dotted 1px red" frameborder="0"></iframe>
</body>
</html>

15

İframe'in kaynağı harici bir etki alanıysa, tarayıcılar iframe içeriklerini gizler (Aynı Kaynak Politikası). Geçici bir çözüm, harici içerikleri bir dosyaya kaydetmektir, örneğin (PHP'de):

<?php
    $contents = file_get_contents($external_url);
    $res = file_put_contents($filename, $contents);
?>

ardından, yeni dosya içeriğini (dize) alın ve html olarak ayrıştırın, örneğin (jquery'de):

$.get(file_url, function(string){
    var html = $.parseHTML(string);
    var contents = $(html).contents();
},'html');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.