2011-09-21 41 views
5

Tôi có một trình chỉnh sửa có trình tải lên nhiều hình ảnh SWF. Vì không phải ai cũng cần tải lên hình ảnh trong bài viết của họ, tôi cần tải động trình tải lên hình ảnh này khi cần thiết. Tôi phải tải nó trong khung nội tuyến vì người tải lên cần một số tập lệnh bên ngoài được tải trước. Và vì tôi cần nó là biến gọi lại cho trình soạn thảo của tôi để sử dụng tôi muốn biết liệu các tập lệnh trong iframe có thể tương tác với các tập lệnh trong trang chính hay không. Hoặc nếu tôi không thể làm điều đó, cách khác để làm điều này là gì?Có thể tập lệnh trong iframe tương tác với tập lệnh trong trang chính

Trả lời

4

Nếu chúng ở trên cùng một tên miền, có.

Đối tượng parent là cửa sổ chính của iframe.

Nếu bạn đã có một biến a trong phạm vi toàn cầu của cửa sổ cha mẹ, bạn có thể vận dụng nó trong iframe như thế này:

parent.a = "new value"; 

Tương tự, nếu a là một chức năng trong phạm vi toàn cầu của phụ huynh cửa sổ, bạn có thể gọi nó như thế này:

parent.a(args); 
0

script trong iframe có thể tương tác với các kịch bản trong trang chính

Chỉ khi iframe và cha mẹ có cùng tên miền chính xác, do same origin policy (MDC link).

4

postMessage in Html5, được hỗ trợ bởi Internet Explorer 8.0+, Firefox 3.0+, Safari 4.0+, Chrome 1.0+ và Opera 9.5+, là cách tôi đã sử dụng nó. Nếu bạn không nhớ thiếu hỗ trợ trong IE7 và các phiên bản cũ hơn, thì đây là cách thực hiện nó.

Javascript trong cửa sổ chính:

window.addEventListener("message", receiveMessage, false); 

function receiveMessage(event){ 
    var source = event.source.frameElement; //this is the iframe that sent the message 
    var message = event.data; //this is the message 
    //do something with message 
} 

Javascript trong iframe;

var message='hello, big window!'; //could be of any type, string, number, array, object, have fun 
window.parent.postMessage(message,'*'); //the '*' has to do with cross-domain messaging. leave it like it is for same-domain messaging. 

Tất nhiên bạn có thể làm theo cách khác, có cửa sổ chính gửi thư đến khung nội tuyến và có một số cuộc đối thoại qua cửa sổ theo cách đó.

0

Nếu khung nội tuyến đến từ một miền khác, nhưng bạn có quyền kiểm soát nội dung, bạn có thể liên lạc giữa hai nội dung theo một vài cách khác nhau. Cách đơn giản nhất là "nói chuyện" thông qua các cặp khóa/giá trị trong URL của iFrame, vì cả cha lẫn mẹ và iFrame đều có quyền truy cập vào đó.

Cách tiếp cận phức tạp hơn là sử dụng proxy iFrame, được mô tả thực sự tốt ở đây: http://www.julienlecomte.net/blog/2007/11/31/ sử dụng Yahoo Pipes để gửi thư qua lại khá độc đáo.

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