我在外部javascript文件中有以下代码。
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中。在iframe之外的主页面(在不同但相似的目的)中,在不同的外部js文件中调用的非常相似的函数在所有浏览器中都可以正常工作。唯一的区别是,使用此代码,我必须从iframe中定位iframe的onload,而不是仅仅通过id抓取iframe。然后我尝试更改所述iframe的onload,以便与下一个内部iframe页面一起使用(这就是为什么我需要在动态编写第一个iframe页面的innerHTML时保留json数组索引[i]。
很抱歉,如果这有点罗嗦,和/或令人困惑,但只要说使用上面粘贴的代码就足够了,我没有问题......除了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 :(得分:0)
尝试eventBox.contentWindow.onload
或$(eventBox).load(function)