Tôi có dự án trong đó tôi cần tạo một phần tử <iframe> bằng JavaScript và nối nó vào DOM. Sau đó, tôi cần chèn một số nội dung vào <iframe>. Đó là một tiện ích sẽ được nhúng vào các trang web của bên thứ ba.
Tôi không đặt thuộc tính "src" của <iframe> vì tôi không muốn tải trang; thay vào đó, nó được sử dụng để cô lập / hộp cát nội dung mà tôi chèn vào đó để tôi không gặp xung đột CSS hoặc JavaScript với trang mẹ. Tôi đang sử dụng JSONP để tải một số nội dung HTML từ máy chủ và chèn nó vào <iframe> này.
Tôi có cách này hoạt động tốt, với một ngoại lệ nghiêm trọng - nếu thuộc tính document.domain được đặt trong trang mẹ (có thể nằm trong một số môi trường nhất định mà tiện ích này được triển khai), Internet Explorer (có thể là tất cả các phiên bản, nhưng tôi xác nhận trong 6, 7 và 8) mang lại cho tôi lỗi "Quyền truy cập bị từ chối" khi tôi cố gắng truy cập đối tượng tài liệu của <iframe> này mà tôi đã tạo. Nó không xảy ra trong bất kỳ trình duyệt nào khác mà tôi đã thử nghiệm (tất cả những trình duyệt hiện đại chính).
Điều này có ý nghĩa, vì tôi biết rằng Internet Explorer yêu cầu bạn đặt miền document.domain của tất cả các cửa sổ / khung sẽ giao tiếp với nhau thành cùng một giá trị. Tuy nhiên, tôi không biết bất kỳ cách nào để đặt giá trị này trên tài liệu mà tôi không thể truy cập.
Có ai biết cách thực hiện việc này không - bằng cách nào đó đặt thuộc tính document.domain của <iframe> được tạo động này? Hay tôi không nhìn nó từ góc độ phù hợp - có cách nào khác để đạt được những gì tôi đang làm mà không gặp phải vấn đề này không? Tôi cần phải sử dụng <iframe> trong mọi trường hợp, vì cửa sổ được tách biệt / hộp cát rất quan trọng đối với chức năng của tiện ích này.
Đây là mã thử nghiệm của tôi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Document.domain Test</title>
<script type="text/javascript">
document.domain = 'onespot.com'; // set the page's document.domain
</script>
</head>
<body>
<p>This is a paragraph above the <iframe>.</p>
<div id="placeholder"></div>
<p>This is a paragraph below the <iframe>.</p>
<script type="text/javascript">
var iframe = document.createElement('iframe'), doc; // create <iframe> element
document.getElementById('placeholder').appendChild(iframe); // append <iframe> element to the placeholder element
setTimeout(function() { // set a timeout to give browsers a chance to recognize the <iframe>
doc = iframe.contentWindow || iframe.contentDocument; // get a handle on the <iframe> document
alert(doc);
if (doc.document) { // HEREIN LIES THE PROBLEM
doc = doc.document;
}
doc.body.innerHTML = '<h1>Hello!</h1>'; // add an element
}, 10);
</script>
</body>
</html>
Tôi đã tổ chức nó tại:
http://troy.onespot.com/static/access_denied.html
Như bạn sẽ thấy nếu bạn tải trang này trong IE, tại thời điểm mà tôi gọi là alert (), tôi có xử lý đối tượng window của <iframe>; Tôi không thể đi sâu hơn vào đối tượng tài liệu của nó.
Cảm ơn rất nhiều cho bất kỳ sự giúp đỡ hoặc đề xuất! Tôi sẽ mang ơn bất cứ ai có thể giúp tôi tìm ra giải pháp cho việc này.