2011-06-23 37 views
6

Tôi có một khung nội tuyến tải vào trang gốc. Khung nội tuyến chứa một chuỗi biểu mẫu và tôi muốn thực hiện hành động trên trang gốc mỗi lần nội dung khung nội tuyến được tải lại (nghĩa là sau khi biểu mẫu được gửi trong nội dung iframe). Mã hiện tại nằm trên trang gốc và hoạt động trong tất cả các trình phát lớn ngoại trừ IE (tôi chỉ quan tâm đến IE 7 & 8).tải khung nội tuyến trong IE7/8 với Javascript

var iframe = document.getElementById('theiframe'); 
function refresh() { 
    alert('foo'); 
} 
if (iframe.attachEvent) iframe.attachEvent('onload', refresh); 
else iframe.onload = refresh; 

Tôi thiếu điều gì sẽ ngăn điều này có hiệu quả trong IE?

+0

Hãy thử tham khảo tài liệu iframe: var iframe = document.getElementById ('theiframe'). (không phải là câu trả lời vì tôi đoán :)) – Cfreak

Trả lời

4

Thay thế:

iframe.onload = refresh 

với:

iframe.attachEvent('load', refresh, false); 


Để xóa bất kỳ sự nhầm lẫn:

var iframe = document.getElementById('theiframe'); 
function refresh() { 
    alert('foo'); 
} 

if (iframe.attachEvent) iframe.attachEvent('onload', refresh); 
else iframe.addEventListener('load', refresh, false) 
+0

Có sự khác biệt nào giữa 'load' và' onload' không? –

+0

IE gọi sự kiện onload, trong khi các trình duyệt khác phải gọi nó là tải. – Joe

+0

Tôi đã thêm một mệnh đề 'else if (iframe.addEventListener) ...' trước khi kết thúc. Cuộc gọi tốt! –

1

Bạn có thể gọi nó từ iframe bằng cách gọi parent.refresh() Khi bạn làm xong với một trình.

+0

Trong khi cuối cùng tôi có quyền kiểm soát đối với cả cha lẫn mẹ và iframe, việc sửa đổi khung nội tuyến theo bất kỳ cách nào là cực kỳ khó khăn. –

+1

ok, nhưng đôi khi sự kiện 'onload' kích hoạt, trong khi tất cả công việc không được thực hiện trong' iframe'. Tôi đã tìm thấy thêm lệnh "Tôi đã hoàn tất" trong khung nội tuyến đáng tin cậy hơn cho tất cả các trình duyệt. – Mic

+0

Trong trường hợp này, không quan trọng là nội dung iframe (tài nguyên, DOM, v.v.) hoặc không tải xong, nó chỉ quan trọng là "người dùng đã bắt đầu xem một trang mới". Điểm tuyệt vời mặc dù. –

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