1

JavaScriptを使用してjQueryを動的にロードしています。jQueryをロードするために、コールバック関数が定義され、そのコールバック関数呼び出しでいくつかのjQueryを実行します。

Firefox、Chrome、IE9 では正常に動作しますが、IE8では「$ が定義されていません」などのエラー メッセージが表示され、IE8でのコールバック関数の実行に問題があることを意味します。解決策を見つけるために丸一日を費やしましたが、どうにもなりません。

<body>    
<script language="javascript" type="text/javascript">
    function loadjQuery(callback) {
        var ver = getInternetExplorerVersion();

        var body = document.getElementsByTagName('body')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';
        if (ver == 8.0) {
            script.onload = callback.call();
        }
        else {
            script.onload = callback;
        }
        script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js';
        body.appendChild(script);
    }
    loadjQuery(function () {
        alert($(window).height());       
    });

    function getInternetExplorerVersion() {
        var rv = -1;
        if (navigator.appName == 'Microsoft Internet Explorer') {
            var ua = navigator.userAgent;
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (re.exec(ua) != null)
                rv = parseFloat(RegExp.$1);
        }
        return rv;
    }
    </script>
</body>

私は完全に立ち往生しています。かなりの助けになるでしょうか?

4

1 に答える 1

1

私もこの関数をコーディングしていましたが、次のコードは完全に機能しているようです。

            // Attach handlers for all browsers
            script.onload = script.onreadystatechange = function() {

                if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
                    done = true;                        
                    // callback function provided as param
                    if(success != null)
                    {
                        success();
                    }
                    script.onload = script.onreadystatechange = null;
                    //head.removeChild(script);                     
                };              
            };     
于 2013-02-28T06:22:38.443 に答える