2017-06-30 10 views
0

javacriptインクルードファイルにasync属性を追加したいのですが、ユーザーエージェントが特定の文字列と一致する場合にのみ追加します。条件付きでJSファイルをdocument.writeなしで含める

ページが "サーバー側にキャッシュされている可能性があります"ので、私はこのサーバー側を実行できません。したがって、javagriptでユーザーエージェントを検出してそれに応じて非同期にする必要があります。

は現在、私はそれをこのようにやっている:

<script id="myscript" type="text/javascript"> 
if(navigator.userAgent.match(/development/i)){ 
    document.write("<script type='text\/javascript' src='\/\/localhost\/static\/js\/header.min.js' async><\/script>\n"); 
} else { 
    document.write("<script type='text\/javascript' src='\/\/localhost\/static\/js\/header.min.js'><\/script>\n"); 
} 
</script> 

私は今達成したい何を、ユーザエージェントならば、おそらくちょうど非同期属性を追加し、何か他のものとのdocument.writeを交換にあります私の文字列にマッチして、そのユーザーエージェントのために非同期に読み込ませます。

私はそれを元に戻すことも考えました。したがって、デフォルトでは、非同期でタグをロードし、ユーザーエージェントが自分の文字列と一致しない場合は削除します。

これも実際にファイルを非同期にロードするようには見えませんか?

<script id="myscript" src="//localhost/static/js/header.min.js"></script> 
<script type="text/javascript"> 
if(navigator.userAgent.match(/development/i)){ 
    document.getElementById("myscript").setAttribute("async", "async"); 
} 
</script> 

私はまた、他のいるUserAgentに遮断するレンダリング滞在し、スクリプトをHTMLで表示される正確な場所でこれを追加するスクリプトが必要。 は、私は、これはどちらか動作しませんと信じて:

var scriptEle = document.createElement("script"); 
scriptEle.setAttribute("type","text/javascript"); 
scriptEle.setAttribute("src","//localhost/static/js/header.min.js"); 
if(navigator.userAgent.match(/development/i)){ 
scriptEle.setAttribute("async","async"); 
} 
document.getElementsByTagName("head")[0].appendElement(scriptEle); 

誰かが良いアイデア...感謝を持っているので、もし私は、javascriptを持つので、熟練していませんよ。

+0

その後「非同期」属性を追加するには、実際に役に立たない、あなたがラインに到達_then_それは非同期にロードするように指示しています:) –

+0

ここでは、document.createElement( 'script')を使用してsrc属性を与え、それをドキュメントに追加することだけが他の唯一のオプションだと確信しています。 – SethWhite

答えて

1

あなたは非同期設定(またはしない)の後src属性を設定しようとすることができます:スクリプトが同期的にロードされるため

<script id="myscript" src=""></script> 

<script type="text/javascript"> 
    var myScript = document.getElementById("myscript"); 

    if(navigator.userAgent.match(/development/i)){ 
     myScript.setAttribute("async", "async"); 
    } 
    myScript.setAttribute("src", "/static/js/header.min.js"); 
</script> 
+0

これはうまくいくようですが(試してみる)、src属性をこのように設定しても、レンダリングがブロックされますか?つまり、このコードの後に​​、その外部ファイルで定義されている他の変数に依存するインラインスクリプトがあればどうでしょうか? – peixotorms

+0

これは、スクリプトを非同期にロードするという問題です。いつ読み込まれるのかわからないので、別のスクリプトがそれに依存していると、おそらく中断されます。 –

+0

これは私が今必要なもののために働いているので、これを受け入れるでしょう。どうもありがとうございました。 – peixotorms

関連する問題