2011-10-20 44 views
5

Tôi có một phần tử như bên dưới tài liệu, tôi có thể lấy phần tử khung nội tuyến theo document.getElementById('iframe_id'), nhưng cách lấy phần tử bên trong iframe này? Tôi đã thử iframeElement.contentWindow và trả lại DOMWindow không có thuộc tính. Cũng đã thử iframeElement.docuemntiframeElement.contentDocument, cả hai đều không xác định. Làm thế nào tôi có thể nhận được nó? Tôi đang sử dụng Chrome mới nhất trong thử nghiệm của mình.Cách lấy phần tử bên trong phần tử iframe trong Javascript?

Đây chính là yếu tố iframe

<iframe id='iframe_id'> 
<html> 
<body>many content here</body> 
</html> 
</iframe> 
+2

là trang của bạn và trang bên trong khung nội tuyến từ cùng một tên miền? nếu không, chrome có thể sẽ không cung cấp cho bạn quyền truy cập vào DOM khác. – Tetaxa

+0

@Tetaxa, cách kiểm tra miền cho khung nội tuyến? Rất có thể là họ đến từ các miền khác nhau. – Thomson

+0

phần đầu tiên của url. nếu các trang trên cùng một máy chủ, bạn sẽ không sao. – Tetaxa

Trả lời

5

Bạn chỉ có thẩm hàm trong một iframe nếu hàm lượng có giao thức, miền và số cổng tương tự như kịch bản thẩm vấn nó. Nó được gọi là SAME ORIGIN

Nếu đúng như vậy, thì mã này sẽ hiển thị nội dung. Nếu không - bạn không thể truy cập vào iframe từ một kịch bản bình thường trong một trang bình thường html

Demo - thử nghiệm trong IE8, Chrome 13 và Fx6

function showIframeContent(id) { 
    var iframe = document.getElementById(id); 
    try { 
     var doc = (iframe.contentDocument)? iframe.contentDocument: iframe.contentWindow.document; 
     alert(doc.body.innerHTML); 
    } 
    catch(e) { 
     alert(e.message); 
    } 
    return false; 
} 


<iframe id='iframe_id1' src="javascript:parent.somehtml()"> </iframe> 
<br/> 
<a href="#" onclick="return showIframeContent('iframe_id1')">Show</a> 
<hr/> 

<iframe id='iframe_id2' src="http://plungjan.name/"> </iframe> 
<br/> 
<a href="#" onclick="return showIframeContent('iframe_id2')">Show</a> 
<hr/> 
+0

html mẫu ở trên chỉ là trích đoạn (đơn giản) từ cửa sổ Thành phần ở cuối Chrome. Nó cho thấy rằng có một html đầy đủ bên trong khung nội tuyến. Bạn có nghĩa là điều này là giả mạo trong giao diện người dùng? – Thomson

+0

Có. Dù sao nếu trang là từ cùng một máy chủ, sau đó mã của tôi hoạt động. Vui lòng xem cập nhật về cùng một nguồn gốc – mplungjan

+0

Vẫn nhận được 'doc' undefine, rất lạ. – Thomson

0

Bạn nên có thể truy cập nó bằng cách document.getElementById('yourIFrame').document.getElementById('yourElement')

4

Có:

var iframe = document.getElementById('iframe_id'); 

Để có được tài liệu nội dung bạn có thể sử dụng:

var contDoc = iframe.contentDocument || iframe.contentWindow.document; 

Sau đó, bạn có thể tìm kiếm yếu tố trong e iframe theo id.

+0

Tôi cho rằng điều này sẽ hoạt động. Nhưng tôi đã nhận được contDoc undefined sau khi tôi chạy 2 báo cáo của bạn. Khung nội tuyến trả lại dường như là đúng. – Thomson

+1

@Thomson: Nó sẽ hoạt động trừ khi nguồn khung nội tuyến được đặt thành tên miền khác. –

+0

Tôi đang nhận _Uncaught DOMException: Đã chặn khung có nguồn gốc "http://example.com" khỏi truy cập khung hình bắt nguồn chéo._ bất kỳ gợi ý nào? –

Các vấn đề liên quan