如何在单击按钮时附加javascript异步

如何在单击按钮时附加javascript异步,javascript,.net,Javascript,.net,为了动态追加脚本,我们需要创建script元素并添加script元素的src属性,最后将script元素追加到head标记(或任何其他标记)中。但是该行为是同步的,页面会被阻塞,直到javascript完全加载。我想知道是否有任何可能的解决方法,通过这些方法,我可以在不使用xhr的情况下异步嵌入javascript var script = document.createElement('script'); script.type = 'text/javascript'; script.src

为了动态追加脚本,我们需要创建script元素并添加script元素的src属性,最后将script元素追加到head标记(或任何其他标记)中。但是该行为是同步的,页面会被阻塞,直到javascript完全加载。我想知道是否有任何可能的解决方法,通过这些方法,我可以在不使用xhr的情况下异步嵌入javascript

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'urlofthescript';
$("#someElement").append( script );
//the above line blocks the UI until it gets loaded. Why?

标记将始终是同步的,除非您使用。但是如果在此处插入
代码
,则执行将立即开始(只要您放弃JS线程)。所以,在字符串中构造代码或通过AJAX加载代码,然后
document.createTextNode(code)
document.createElement('script')
appendChild
将代码加载到脚本中,然后将脚本加载到文档中。另一种可能是使用一些最近出现的优秀模块系统,如RequireJS,为您解决所有这些问题。

我想问一下,如果说我的脚本url需要几秒钟(10秒)来呈现脚本,那么UI会在接下来的10秒内被阻塞。这可以通过async属性删除吗?而且,按照规定,我不想使用任何其他库(如requirejs)来实现这一点。也不允许使用xhr方法。你说的“呈现脚本”是什么意思?你的意思是执行它吗?还是加载它?根据链接,在支持脚本加载的浏览器中,可以使用
async
异步加载脚本。脚本执行永远不能是异步的,除非您以这样一种方式编写它,它周期性地放弃对JS线程的控制。