2009-07-06 54 views

Trả lời

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

Bạn đơn giản hơn có thể viết:

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

và doc nội hợp lệ đầu tiên sẽ được trả lại.

Khi bạn nhận được tài liệu bên trong, bạn chỉ có thể truy cập vào nội bộ của nó giống như cách bạn truy cập bất kỳ phần tử nào trên trang hiện tại của mình. (innerDoc.getElementById ... vv.)

QUAN TRỌNG: Đảm bảo iframe nằm trên cùng một miền, nếu không bạn không thể truy cập vào nội bộ của nó. Đó sẽ là kịch bản cross-site.

+4

Câu trả lời hay. Bạn có biết rằng bạn có thể làm: var innerDoc = iframe.contentDocument || iframe.contentWindow.document;// dễ đọc hơn và có nghĩa là cùng một –

+1

yeah, tôi đã biết về điều đó. – geowa4

+5

Tôi đã nhìn thấy mọi người bối rối bởi điều đó nhiều hơn các toán tử ternary. Dường như họ không biết rằng cái hợp lệ đầu tiên được trả về. – geowa4

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

CallYourFunction() là chức năng bên trong trang và chức năng hành động trên nó

+4

Đó là gọi hàm từ iFrame, không nhận được tham chiếu đến phần tử. –

1

Không có câu trả lời khác đang làm việc cho tôi. Tôi đã kết thúc việc tạo ra một chức năng trong iframe của tôi mà trả về đối tượng tôi đang tìm kiếm:

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

Sau đó, bạn gọi hàm như vậy để lấy phần tử:

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

Đừng quên để truy cập iframe sau khi được tải. Cách cũ nhưng đáng tin cậy mà không có jQuery:

<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> 
Các vấn đề liên quan