2012-02-22 33 views
29

Giả sử tôi có Trang web được gọi là example.com mà iframe được nhúng vào iframe.net miền, bây giờ tôi muốn đọc nội dung của khung nội tuyến và chuyển một số thông số để hiển thị thông báo văn bản. Giống như Hi với tên người dùng.Vấn đề iframe miền chéo

Bây giờ vấn đề là thế này có thể không có khả năng để thực hiện kết nối giữa hai, thậm chí là không thể để có được những innerHTML của iframe tôi đã sử dụng theo phương pháp

document.getElementById('myframe').contentWindow.document.body.innerHTML; 

Nó ném lỗi "Permission denied để truy cập tài sản"

Đừng ai biết làm thế nào để đọc và viết bằng chéo nền tảng miền

+0

Bạn có thể sử dụng easyxdm thư viện để giao tiếp giữa các lĩnh vực chéo. Đây là một liên kết xin vui lòng kiểm tra. Tôi đã sử dụng kỹ thuật này để định lại kích thước iframe (chiều rộng, chiều cao) trên các tên miền chéo. Tôi không chắc liệu thư viện này có hoạt động với kịch bản của bạn hay không. Hãy thử một lần. http://easyxdm.net/wp/ –

Trả lời

37

Nếu bạn không có quyền kiểm soát các trang web đóng khung, bạn không thể phá vỡ chính sách cross-domain.

Nếu bạn có quyền kiểm soát trên cả hai trang web, bạn có thể sử dụng phương thức postMessage để chuyển dữ liệu qua các miền khác nhau. Một ví dụ rất cơ bản:

// framed.htm: 
window.onmessage = function(event) { 
    event.source.postMessage(document.body.innerHTML, event.origin); 
}; 

// Main page: 
window.onmessage = function(event) { 
    alert(event.data); 
}; 

// Trigger: 
// <iframe id="myframe" src="framed.htm"></iframe> 
document.getElementById('myframe').contentWindow.postMessage('','*'); 
+1

Có bất kỳ hacking proxy tên miền ngược nào để làm cho nó xảy ra –

+1

@KunalVashist Phụ thuộc vào ứng dụng của bạn (cần thêm chi tiết). Ngoài ra, hãy xem câu hỏi này [Các cách để phá vỡ chính sách cùng nguồn gốc] (http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy). –

+0

Thx @rob cái này là tốt, nhưng cuối cùng tôi không có quyền truy cập vào nội dung khung –

2

Trong Internet Explorer 8 sự kiện trôi qua như một tham số có thể rỗng, đó là lý do tại sao bạn cần phải truy cập vào sự kiện này một cách khác nhau:

Trong khung .html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    evt.source.postMessage('Message from iFrame', evt.origin); 
}; 

On main.html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    alert(evt.data); 
}; 

Sự kiện này được kích hoạt cùng một cách như Rob W đã trình bày:

document.getElementById('frameId').contentWindow.postMessage('message','*'); 
Các vấn đề liên quan