Dọc theo dòng Tim Down's answer nhưng tận dụng jQuery
(được đề cập bởi OP) và lỏng lẻo khớp nối trang chứa và các iframe, bạn có thể làm như sau:
Trong iframe:
<script>
$(function() {
var w = window;
if (w.frameElement != null
&& w.frameElement.nodeName === "IFRAME"
&& w.parent.jQuery) {
w.parent.jQuery(w.parent.document).trigger('iframeready');
}
});
</script>
Trong trang có chứa:
<script>
function myHandler() {
alert('iframe (almost) loaded');
}
$(document).on('iframeready', myHandler);
</script>
Ifra tôi kích hoạt một sự kiện trên tài liệu của cửa sổ cha mẹ (có khả năng tồn tại) - hãy cẩn thận rằng tài liệu gốc cần một cá thể jQuery của chính nó để làm việc này. Sau đó, trong cửa sổ cha mẹ bạn đính kèm một trình xử lý để phản ứng với sự kiện đó.
Giải pháp này có lợi thế là không phá vỡ khi trang chứa không chứa trình xử lý tải dự kiến. Nói chung hơn, nó không phải là mối quan tâm của iframe để biết môi trường xung quanh của nó.
Xin lưu ý rằng chúng tôi đang tận dụng sự kiện sẵn sàng DOM để kích hoạt sự kiện - điều này phải phù hợp với hầu hết các trường hợp sử dụng.Nếu không, chỉ cần đính kèm dòng sự kiện kích hoạt sự kiện tải của cửa sổ như vậy:
$(window).on('load', function() { ... });
Hãy thử thiết lập src của khung nội tuyến trước khi thêm nó vào DOM. Điều này sẽ ngăn sự kiện tải kích hoạt hai lần. – Abe