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 自体にあります。iframe の外側のメイン ページから (異なるが同様の目的で) 別の外部 js ファイルで呼び出される非常によく似た関数は、すべてのブラウザーで問題なく動作します。唯一の違いは、このコードでは、ID で iframe を取得するのではなく、iframe 内から iframe のオンロードをターゲットにする必要があることです。次に、次の内部 iframe ページで使用するために、前述の 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 に答える