2011-01-01 53 views
6

Tôi cần lấy toàn bộ nội dung của iframe từ cùng một miền. Toàn bộ nội dung có nghĩa là tôi muốn mọi thứ bắt đầu từ <html> (bao gồm), không chỉ nội dung <body>. Nội dung được sửa đổi sau khi tải, vì vậy tôi không thể lấy lại nó từ máy chủ.Cách nhận nội dung WHOLE của khung nội tuyến?

+0

Bạn đang cố gắng lưu trữ tất cả tài nguyên ở đâu đó trong trình duyệt hoặc bạn đang cố gắng hoàn thành điều gì? – BastiBen

+0

Tôi cần gửi nội dung đã sửa đổi đến máy chủ. – jesper

Trả lời

15

I belive tôi đã tìm thấy giải pháp tốt nhất:

var document = iframeObject.contentDocument 
var serializer = new XMLSerializer(); 
var content = serializer.serializeToString(document); 

Trong content chúng tôi có nội dung iframe đầy đủ, bao gồm DOCTYPE yếu tố, trong đó đã mất tích trong các giải pháp trước. Và ngoài ra mã này rất ngắn gọn và sạch sẽ.

+0

Cảm ơn bạn rất nhiều. – rsharpy

+0

Điều này hoàn toàn sai, bạn đã bỏ lỡ dấu chấm phẩy :) Cảm ơn rất nhiều. –

+0

Một vấn đề tôi có với phương pháp này là nó mã hóa nội dung iframe. Tất cả mọi thứ được mã hóa Html bao gồm cả kiểu phông chữ cho gia đình chẳng hạn. Nếu bạn có thẻ kiểu với họ phông chữ định nghĩa là "Courier New", Courier, monospace thì dấu ngoặc kép sẽ được mã hóa. – Marko

7

Nếu nó là trên cùng một tên miền, bạn chỉ có thể sử dụng

iframe.contentWindow.document.documentElement.innerHTML 

để có được nội dung của các iframe, trừ <html></html> thẻ, nơi

iframe = document.getElementById('iframeid'); 
+0

Tôi cũng cần thẻ '' với tất cả các thuộc tính. – jesper

+0

Bạn có thể lặp qua thuộc tính 'iframe.contentWindow.document.documentElement' để tạo thẻ HTML gói (hoặc sử dụng' bên ngoàiHTML' không chuẩn). Bạn có thể tìm thấy mã trình duyệt chéo mẫu tại đây: http://help.dottoro.com/ljloliex.php. – Thai

+1

Giải pháp đầu tiên ít được chấp nhận hơn (không thể sử dụng 'outerHTML' vì FF không hỗ trợ nó). Nó sẽ đơn giản hơn nếu jQuery cho phép tôi bọc thẻ 'html' đã tạo trong một thẻ" wrapper "khác và sử dụng phương thức' html() 'trên trình bao bọc đó ... Tất nhiên" Không thể chèn nút tại điểm đã chỉ định trong cấu trúc phân cấp " – jesper

1
$('input.test').click(function(){ 
    $('textarea.test').text($('iframe.test').contents()); 
}); 
0

Bạn có thể lấy nguồn gốc của bất kỳ tệp nào trên cùng một tên miền với Ajax, không hiển thị html đầu tiên-

//

function fetchSource(url, callback){ 

    try{ 
     var O= new XMLHttpRequest; 
     O.open("GET", url, true); 
     O.onreadystatechange= function(){ 
      if(O.readyState== 4 && O.status== 200){ 
       callback(O.responseText); 
      } 
     }; 
     O.send(null); 
    } 
    catch(er){} 
    return url; 
} 
function printSourceCode(text){ 
    var el= document.createElement('textarea'); 
    el.cols= '80'; 
    el.rows= '20'; 
    el.value= text; 
    document.body.appendChild(el); 
    el.focus(); 
} 

fetchSource (location.href, printSourceCode);

+0

" Nội dung được sửa đổi sau khi tải, vì vậy tôi không thể lấy lại nó từ máy chủ. " – jesper

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