如果加载了es5-shim.js,请检查javascript?这是为了ie8

时间:2015-04-08 14:05:51

标签: javascript angularjs internet-explorer internet-explorer-8 es5-shim

有没有办法定义是否

https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.1.0/es5-shim.js

https://cdnjs.com/libraries/es5-shim

是否已加载?

对于AngularJS,您可以登录javascript:

if(!window.angular){
//not loaded
}

为垫片做这件事的正确方法是什么?

谢谢。

3 个答案:

答案 0 :(得分:2)

尝试

<!--[if lt IE 9]>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.1.0/es5-shim.js"></script>
<script>String.prototype.trim || document.write('<script src="/js/es5-shim.js"><\/script>')</script>
<![endif]-->

或者让我知道它是否有效。

答案 1 :(得分:0)

你不应该检查是否存在垫片。使用垫片的想法是你想要使用某些方法,例如Object.keys。当这些方法本身不可用时,您的垫片会将它们添加到有问题的全局中,并且您的代码并不知道其中的差异。

您能否详细说明为什么您需要知道它已加载?

答案 2 :(得分:0)

请按照以下SO问题的接受答案的更新部分:

How to detect if javascript files are loaded?

以下是他的解决方案(所有信用都转到T.J Crowder):

function loadScript(path, callback) {

    var done = false;
    var scr = document.createElement('script');

    scr.onload = handleLoad;
    scr.onreadystatechange = handleReadyStateChange;
    scr.onerror = handleError;
    scr.src = path;

    function handleLoad() {
        if (!done) {
            done = true;
            callback(path, "ok");
        }
    }

    function handleReadyStateChange() {
        var state;

        if (!done) {
            state = scr.readyState;
            if (state === "complete") {
                handleLoad();
            }
        }
    }
    function handleError() {
        if (!done) {
            done = true;
            callback(path, "error");
        }
    }
}