加载异步JS文件& readyState的?

时间:2013-12-10 11:02:20

标签: javascript

我正在读这本书:第三方Javascript

有一个示例代码:(加载外部js)

  (function ()
    {
        var script = document.createElement('script');
        script.async = true;
        script.src = 'js_file.js';
        script.onload = script.onreadystatechange = function ()
        {
            var rdyState = script.readyState;
            if (!rdyState || /loaded|complete/.test(rdyState))
            {
                /*...*/
                script.onload = null;
                script.onreadystatechange = null;
            }
        };
        var entry = document.getElementsByTagName('script')[0];
        entry.parentNode.insertBefore(script, entry);
    })();

我正在努力理解这一行:

if (!rdyState || /loaded|complete/.test(rdyState))...

我在undefined

中收到了script.readyState

enter image description here

问题

  • 为什么我在undefined收到script.readyState
  • 是否应该返回数字或字符串?根据正则表达式测试,它假设返回字符串。但我见过许多地方都会返回数字。那......?

http://jsbin.com/ipOrIDeY/4/edit

(Chrome 31.感谢Google,但不要感谢字体平滑版。(32))

1 个答案:

答案 0 :(得分:1)

这是我加载javascript文件的代码,它工作得很好,readystate返回字符串,但它的值取决于你的javascript引擎。

 var n = document.createElement('script');
          n.setAttribute('type', 'text/javascript');
          n.setAttribute('src', 'Your src');
          n.setAttribute('async', true);
          n.onerror = function() {
            callback()
            n.onerror = null;
          };

          n.onload = n.onreadystatechange = function() {
            if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') {
              callback()
              n.onload = n.onreadystatechange = null;
            }
          };

          document.body.appendChild(n);