2013-01-09 36 views
0

我在外部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不完全支持他們)?

回答

0

嘗試eventBox.contentWindow.onload也許$(eventBox).load(function)

+0

感謝您嘗試,但沒有這些解決方案的工作,再加上我已經從主頁執行另一個外部JavaScript文件中使用非常相似的代碼,它改變的I幀onload事件就好了。它適用於:var eventBox = document.getElementById(「eventBox」); eventBox.onload = function(){// here here} – VoidKing

+0

再試一次:我一直在使用iframe,只在IE9中使用。這是我使用最多的代碼(希望它有幫助): var context = $('#iframe'); ('load',function(){ alert('loaded'); }); – James

+0

我會給它一個,所以,如果它的工作,我可以接受你的答案,但是,它可能需要一段時間轉換回昨天我是怎麼做的(我今天早上放棄了,並將其轉換爲服務器端處理,儘管我寧願不必爲此頁面做到這一點)。我會讓你知道的! – VoidKing