【速記】現在動作中のjsスクリプトのアドレスとHTMLScriptElement.prototype.readyStateを取得する
2034 ワード
起因
コード
まず、
では、IEブラウザが
な は、
の によれば、
Dcument.current Script:https://developer.mozilla.org...Document.readyState: https://developer.mozilla.org...
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
はシナリオが にローディング みであることを している.readyState
がinteractive
であるかどうかを して、ある
タグが の コードの であると できます.な は、
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...