回答
我認爲對於IE中的iframe,你不能通過編程設置事件處理程序(onload),你需要在你的標記中指定它。
喜歡的東西:
<iframe id="myFrame" onload="myFunction();"></iframe>
否則IE只是要忽略的功能。
添加前綴 「IFRAME」 您的帳號面前:
$('iframe#myFrame').load(function() {
...
});
Alternativly嘗試使用 「準備」,而不是 「負擔」:
$('#myFrame').ready(function() {
alert("Loaded");
});
這應該工作。
直接指定處理程序到onload
可在Chrome,FF和IE中使用(使用IE 8測試)。
(function (selector) {
var frame = $(selector).get(0);
if (frame) {
frame.onload = function() {
alert('frame loaded.');
};
}
})('#myframe');
在添加處理程序之前,IE可能已經加載了內容(並觸發了該事件)。我發現,當我靜態指定iframe src attr,並通過jquery添加$(x).load事件處理程序時,firefox(3.6.28)觸發了我的處理程序,但IE(8.0.6001.18702)沒有。
我最終調整了測試程序,以便在添加$(x).load處理程序後,通過javascript設置iframe src。我的$(x).load處理程序在IE和Firefox的相同點處調用(但注意通過iframe onload屬性添加的處理程序在IE和FF之間的行爲不同)。以下是我結束了:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<script type="text/javascript" src="jquery-ui/js/jquery-1.6.2.min.js"></script>
<script language="javascript">
function show_body(name, $iframe) {
$('.log').append(name+': '+$iframe.contents().find('body').html()+'<br/>');
}
function actuallyLoaded(name, x) {
$('.log').append(name+' actually loaded<br/>');
}
$(document).ready(function(){
$('.i1').load(function(){show_body('i1', $('.i1'));});
$('.i1').attr('src', 'eb_mce_iframe_content.html');
var $x=$('.i1').clone().removeClass('i1');
$('body').append($x);
$x.load(function(){show_body('x', $x);});
$x.attr('src', 'eb_mce_iframe_content.html');
});
</script>
</head>
<body>
<iframe class="i1" onload="actuallyLoaded($(this).attr('class')+'/'+$(this).attr('src'), this);">
</iframe>
<div class="log">
</div>
</body>
</html>
...這裏是Firefox的 「日誌」:
I1/eb_mce_iframe_content.html實際加載 I1:
弗雷德狐狸。
/eb_mce_iframe_content.html實際加載 X:
弗雷德狐狸。
如果將if ($.browser.safari || $.browser.opera) {
行更改爲if ($.browser.safari || $.browser.opera || $.browser.msie) {
,則在here中對jQuery使用JavaScript代碼將起作用。所以你有以下幾點:
$(function(){
var iFrames = $('iframe');
function iResize() {
for (var i = 0, j = iFrames.length; i < j; i++) {
iFrames[i].style.height = iFrames[i].contentWindow.document.body.offsetHeight + 'px';}
}
if ($.browser.safari || $.browser.opera || $.browser.msie) {
iFrames.load(function(){
setTimeout(iResize, 0);
});
for (var i = 0, j = iFrames.length; i < j; i++) {
var iSource = iFrames[i].src;
iFrames[i].src = '';
iFrames[i].src = iSource;
}
} else {
iFrames.load(function() {
this.style.height = this.contentWindow.document.body.offsetHeight + 'px';
});
}
});
seis的答案是正確的,可以改進使用非全局/匿名函數。
window.dummy_for_ie7 = function() { }
var iframe = $('<iframe onload="dummy_for_ie7" />')[0];
iframe.attachEvent('onload', real_event_handler)
令我吃驚的是,這個工程。
注意:iframe。onload = func()將不起作用,即使在那之後。你必須使用attachEvent。去搞清楚。
注意:自然,此代碼逐字將無法在符合標準的UA中工作。
我對IE使用readystatechange
事件。
var $iframe = $("<iframe>");
$iframe.on("load readystatechange", callback);
- 1. 的iframe的onload事件觸發加載
- 2. 的iframe加載事件未觸發jQuery中
- 3. jQuery .change()事件在IE中未觸發
- 4. 加載iframe的事件處理程序未觸發
- 5. iframe中的OnLoad事件在重新加載後未在IE8中觸發
- 6. Ionic - 觸發事件在IE中未觸發
- 7. 如何在iframe在jQuery中完成加載時觸發事件?
- 8. jquery加載事件從未觸發
- 9. UserControl加載事件未被觸發
- 10. Winforms UserControl加載事件未被觸發
- 11. IE中的iFrame OnLoad事件在Tapestry區域更新後未觸發
- 12. iFrame點擊事件未觸發
- 13. 加載的事件在Silverlight中未觸發
- 14. 未在Firefox內部的iframe中觸發的重要事件
- 15. 如何觸發iFrame內的iFrame加載?
- 16. iframe加載/就緒事件觸發行爲的問題(jQuery)
- 17. 在Firefox或IE中未觸發的拖動事件
- 18. 在IE中未觸發Event.observe的「更改」事件
- 19. 用jQuery觸發iframe加載
- 20. Event.observe未在IE中觸發
- 21. FineUploader OnProgress事件不在IE中觸發
- 22. 從iframe觸發事件
- 23. 讓iFrame觸發body.onclick事件
- 24. IFRAME .load事件不觸發
- 25. 如何在更改iframe源時多次觸發iframe加載事件
- 26. Firefox未檢測到iframe加載事件?
- 27. YouTube iframe API - onReady和onStateChanged事件在IE9中未觸發
- 28. iframe中加載事件
- 29. 使用grails webflow觸發事件加載fancybox iframe內容
- 30. Dropdown JavaScript onClick事件在Chrome/IE中未觸發
感謝,但「準備就緒」事件被iFrame的內容之前觸發加載... – Muleskinner 2010-12-02 11:45:15
加前綴的iframe不工作(IE 8) – Muleskinner 2010-12-02 13:47:44
它不工作在IE 9 – Damiox 2011-09-04 01:22:22