如何将标记属性置于onload& javascript中的错误?

时间:2016-12-17 03:50:32

标签: javascript dom dom-events

脚本旧(1):

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

脚本新(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);

如何将此标记放在脚本2中才能正常工作。

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

2 个答案:

答案 0 :(得分:0)

像这样:

sNew.onerror = checkScriptLoaded2;
sNew.onload = function() {
  scriptLoaded2 = true;
};

你可以learn more about this type of event handling on quirksmode.org。基本上,对于元素支持的大多数事件,都是on<eventname>属性,您可以为其分配一个函数来处理它。

请参阅MDN上的HTMLScriptElement documentation(尽管它没有列出事件处理程序)。

另请注意

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

仅在已有另一个现有<script>元素时才有效。如果脚本不必出现在任何特定位置,那么做MDN建议的更安全一点:

document.head.appendChild(sNew);

答案 1 :(得分:0)

这样。

创建属性并将其添加到脚本元素。

createAttribute()方法创建具有指定名称的属性,并将该属性作为Attr对象返回。

attribute.value属性用于设置属性的值。

element.setAttributeNode()方法用于将新创建的属性添加到元素中。

&#13;
&#13;
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);
&#13;
<div>hello</div>
&#13;
&#13;
&#13;