我在外部JavaScript文件中有以下代碼。無法更改IE9中的iframe onload監聽器
jQuery(function ($) {
//////////////////////UPCOMING EVENTS JSON SERVER START///////////////////////////
var eventList = $("#eventList"); //cache the element
$.getJSON("/JsonControl/Events.json", function (jsonObj) {
val = "";
for (var i = 0; i < jsonObj.events.length; ++i) {
val += "<p>" + jsonObj.events[i].dateMonth + "/" + jsonObj.events[i].dateNumber +
"/" + jsonObj.events[i].dateYear + " - <span id='EL" + i + "' class='link' " +
"onclick=plotEvent(" + i +")>" + jsonObj.events[i].title + "</span></p>";
}
eventList.html(val);
});
//////////////////////UPCOMING EVENTS JSON SERVER END/////////////////////////////
});
function plotEvent(index)
{
$.ajax({
url: "/JsonControl/Events.json",
dataType: 'json',
async: false,
success: function (jsonObj)
{
var eventBox = window.frameElement;
alert("This alert fires in all browsers, including IE9")
eventBox.onload = function()
{
alert("This alert doesn't fire in IE9.")
window.frameElement.onload = null; // unset it so it only fires once
eventBox = eventBox.contentDocument || eventBox.contentWindow.document;
eventBox.getElementById("title").innerHTML = (jsonObj.events[index].title);
eventBox.getElementById("content").innerHTML = (jsonObj.events[index].explanation);
eventBox.getElementById("dateHolder").innerHTML = (jsonObj.events[index].dateMonth + "-" + jsonObj.events[index].dateNumber + "-" + jsonObj.events[index].dateYear);
};
eventBox.src="/Event htms/Event.htm";
}
});
}
加載此腳本的頁面位於iframe本身中。在不同的外部js文件中調用非常類似的函數,從iframe之外的主頁面(用於不同但類似的目的)在所有瀏覽器中都可以正常工作。唯一的區別是,通過這段代碼,我必須從iframe內部對iframe進行加載,而不是僅僅通過id來獲取iframe。然後我試圖改變,所述iframe的onload,用於下一個內部iframe頁面(這就是爲什麼當我動態編寫第一個iframe頁面的innerHTML時需要保留json數組索引[0121]這是有點羅嗦,和/或混淆,但足以說,使用上面粘貼的代碼,我沒有任何問題......除IE(在IE9嘗試)。我已經嘗試了幾十個例子和假設的解決方案,但沒有奏效使用IE9
這裏就是我的意思是,當我說「它不能在IE9工作」:。
這內plotEvent部分的代碼()不火:
eventBox.onload = function()
{
alert("This alert doesn't fire in IE9.")
window.frameElement.onload = null; // unset it so it only fires once
eventBox = eventBox.contentDocument || eventBox.contentWindow.document;
eventBox.getElementById("title").innerHTML = (jsonObj.events[index].title);
eventBox.getElementById("content").innerHTML = (jsonObj.events[index].explanation);
eventBox.getElementById("dateHolder").innerHTML = (jsonObj.events[index].dateMonth + "-" + jsonObj.events[index].dateNumber + "-" + jsonObj.events[index].dateYear);
};
有沒有辦法解決這個問題,或者是這樣的事情爲什麼iframe會不會更經常使用(即,IE不完全支持他們)?
感謝您嘗試,但沒有這些解決方案的工作,再加上我已經從主頁執行另一個外部JavaScript文件中使用非常相似的代碼,它改變的I幀onload事件就好了。它適用於:var eventBox = document.getElementById(「eventBox」); eventBox.onload = function(){// here here} – VoidKing
再試一次:我一直在使用iframe,只在IE9中使用。這是我使用最多的代碼(希望它有幫助): var context = $('#iframe'); ('load',function(){ alert('loaded'); }); – James
我會給它一個,所以,如果它的工作,我可以接受你的答案,但是,它可能需要一段時間轉換回昨天我是怎麼做的(我今天早上放棄了,並將其轉換爲服務器端處理,儘管我寧願不必爲此頁面做到這一點)。我會讓你知道的! – VoidKing