İFrame içinden öğe alma


Yanıtlar:


382
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

Daha kolay yazabilirsiniz:

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

ve ilk geçerli içsel doküman iade edilecektir.

Dahili dokümanı aldıktan sonra, dahili sayfasına mevcut sayfanızdaki herhangi bir öğeye eriştiğiniz şekilde erişebilirsiniz. ( innerDoc.getElementById... vb.)

ÖNEMLİ: iframe'in aynı alan adında olduğundan emin olun, aksi takdirde dahili cihazlarına erişemezsiniz. Bu siteler arası komut dosyası oluşturmak olacaktır.


4
Mükemmel cevap. Yapabileceğinizi biliyor muydunuz: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // daha okunabilir ve aynı anlama geliyor
David Snabel-Caunt

5
Üçlü operatörlerden daha fazla insanın kafası karıştığını gördüm. İlk geçerli olanın iade edildiğini bilmiyorlar.
geowa4

5
Aslında, ben de dahil etmek için cevabı düzenlerken,
omzumdaki

12
Muhtemelen basitlik için daha karmaşık kod kullanmaktan daha iyi eğitmek :)
David Snabel-Caunt

1
@JellicleCat: Bunun herhangi bir yolu, "tek tıklamayla" saldırı veya "oturum sürme" olarak da bilinen "Siteler arası istek sahteciliği" yapmanın bir yoludur
CSharper

12

Yüklendikten sonra iframe'e erişmeyi unutmayın . JQuery olmadan eski ama güvenilir bir şekilde:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>

<script>
function access() {
   var iframe = document.getElementById("iframe");
   var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
   console.log(innerDoc.body);
}
</script>

3
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')

CallYourFunction() sayfa içindeki işlev ve bu işlev eylemi


5
Bu, iFrame'den bir fonksiyon çağırıyor, öğeye referans almıyor.
Nick Mitchell

3

Yukarıdaki yanıtlar Javscript kullanarak iyi çözümler verdi. İşte basit bir jQuery çözümü:

$('#iframeId').contents().find('div')

Buradaki hile, jQuery'nin .contents()yöntemidir, aksine .children()sadece HTML öğelerini .contents()alabilir, hem metin düğümlerini hem de HTML öğelerini alabilir. Bu nedenle bir iframe'in doküman içeriğini kullanarak alabilirsiniz.

JQuery .contents(): .contents () hakkında daha fazla bilgi

Not iframe ve sayfa aynı alan üzerinde olması gerektiğini.


1

Diğer cevapların hiçbiri benim için işe yaramıyordu. İç çerçevemde aradığım nesneyi döndüren bir işlev oluşturdum:

function getElementWithinIframe() {
    return document.getElementById('copy-sheet-form');
}

Daha sonra elemanı almak için bu işlevi şöyle çağırırsınız:

var el = document.getElementById("iframeId").contentWindow.functionNameToCall();


-3

Aşağıdaki kod iframe verilerini bulmanıza yardımcı olacaktır.

let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;
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.