2016-12-17 5 views
0

スクリプト古い(1):javascriptにタグ属性onloadとonerrorをどのように置くのですか?

document.write('<scr'+'ipt src="http://example.com/script.js?'+Math.random()+'" type="text/javascript" onerror="checkScriptLoaded2();" onload="scriptLoaded2=true;"></scr'+'ipt>'); 

スクリプト新しい(2):私は正常に動作するために、スクリプト2でこのタグを入れるにはどうすればよい

var sNew = document.createElement("script"); 
sNew.async = true; 
sNew.src = "http://example.com/script.js?"+Math.random(); 
var s0 = document.getElementsByTagName('script')[0]; 
s0.parentNode.insertBefore(sNew, s0); 

。そのよう

onerror="checkScriptLoaded2();" onload="scriptLoaded2=true;" 

答えて

0

このようにしてください。

属性を作成し、スクリプト要素に追加します。

createAttribute()メソッドは、指定された名前の属性を作成し、その属性をAttrオブジェクトとして返します。

attribute.valueプロパティは、属性の値を設定するために使用されます。

element.setAttributeNode()メソッドは、新しく作成された属性を要素に追加するために使用されます。

function checkScriptLoaded2() 
 
{ 
 
    alert("Error in loading.") 
 
} 
 

 
var sNew = document.createElement("script"); 
 
sNew.async = true; 
 
sNew.src = "https://example.com/script.js?"+Math.random(); 
 

 

 
sNew.setAttribute('onerror', 'checkScriptLoaded2();') // Shorthand as suggested by Felix 
 

 
var att = document.createAttribute("onload"); // Elaborated way 
 
att.value = "scriptLoaded2=true;" 
 
sNew.setAttributeNode(att) 
 

 

 

 

 
var s0 = document.getElementsByTagName('script')[0]; 
 
s0.parentNode.insertBefore(sNew, s0);
<div>hello</div>

+0

DOMプロパティを使用できるときにHTML属性を使用するのはなぜですか(特に 'async'と' src' DOMプロパティを使用しているので)? –

+0

@FelixKlingこれは達成するための方法の1つですが、回答のサンプルを提供することができればうれしいです。 – Deep

+0

もちろんそれは一方通行ですが、あまり一般的ではありません。おそらく、少なくとも 'createAttribute'と' setAttributeNode'についてもっと説明することができます。別の(より簡潔な)方法は 'setAttribute( 'onerror'、 '...')' btwを使うことです。 –

0

あなたは learn more about this type of event handling on quirksmode.orgでき
sNew.onerror = checkScriptLoaded2; 
sNew.onload = function() { 
    scriptLoaded2 = true; 
}; 

。基本的に、要素がサポートするほとんどのイベントでは、それを処理する関数を割り当てることができるon<eventname>プロパティがあります。

MDNのHTMLScriptElement documentationを参照してください(ただし、イベントハンドラは表示されません)。


はまた別の既存<script>要素がすでに存在する場合

var s0 = document.getElementsByTagName('script')[0]; 
s0.parentNode.insertBefore(sNew, s0); 

のみ動作することに注意してください。スクリプトが特定の場所に表示される必要がない場合は、MDNが示唆していることをやりなおすことでもう少しフェイルセーフです:

document.head.appendChild(sNew); 
+0

提案フィードバックをありがとうございました。私は投票をするだろうが、残念ながら私は十分な評判を持っていない。 –

+0

それは問題ありません。 'setAttribute *'メソッドを使ってはいけないということだけを伝えることができます。それは後退です。 DOM要素がある場合は、DOMプロパティを使用します。 –

関連する問題