【速記】現在動作中のjsスクリプトのアドレスとHTMLScriptElement.prototype.readyStateを取得する


起因layUIのソースコードを読んで、リモートスクリプトをロードするコードには、現在のjsスクリプトアドレスを判断するコードがあります.document.currentScriptに対してサポートされているかどうかは、異なる論理を実行します.document.currentScriptをサポートする場合、document.currentScript.srcから現在のスクリプト実行のアドレスを直接取得する.document.currentScriptがサポートされていない場合、ドキュメントのすべてのタグを して、どのタグのreadyState'interactive'であるかを すると、このラベルのsrc は のスクリプトの のアドレスであると する.
コード
//  layui    
 getPath = function () {
      var jsPath = doc.currentScript ? doc.currentScript.src : function () {
        var js = doc.scripts
          , last = js.length - 1
          , src;
        for (var i = last;i > 0;i--) {
          if (js[i].readyState === 'interactive') {
            src = js[i].src;
            break;
          }
        }
        return src || js[last].src;
      }();
      return jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
    }()
なぜこのような をするのですか?
まず、Document.currentScriptのブラウザのサポート を てみましょう. には の のようです.
では、IEブラウザがDocument.currentScriptのサポートの で で しましたが、IEブラウザでは のスクリプトのアドレスをどう しますか? のIEのは、readyStateの をサポートしており、その はDocument.readyStateと じで、loadingはローディング であり、interactiveは インタラクティブ (すなわち である)であることを し、completeはシナリオが にローディング みであることを している.readyStateinteractiveであるかどうかを して、あるタグが の コードの であると できます.
な は、HTMLScriptElement.prototype.readyStateがIEサポートのみであり、ChromeおよびFirefoxはサポートされていないことである.
の によれば、Document.currentScriptのポリlyfillの は、HTMLScriptElement.prototype.readyStateに づいて され、 には み り である.https://github.com/JamesMGree... の な

Dcument.current Script:https://developer.mozilla.org...Document.readyState: https://developer.mozilla.org...