0

我在外部 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 本身中。一个非常相似的函数在不同的外部 js 文件中调用,从 iframe 外部的主页(用于不同但相似的目的)在所有浏览器中都可以正常工作。唯一的区别是,使用此代码,我必须从 iframe 中定位 iframe 的加载,而不是仅通过 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 不完全支持它们)?

4

1 回答 1

0

尝试eventBox.contentWindow.onload或也许$(eventBox).load(function)

于 2013-01-09T22:14:40.233 回答