我正在通过ajax(作为html字符串中的<script>
块)加载一些javascript代码,我正在使用jquery.html()
将有效负载注入<div>
。 jquery.html()
方法会自动删除注入的<script>
元素。
我希望等待使<script>
块中的代码完成执行,然后再将执行释放回主事件循环。即使<script>
包含回调,例如$.ajax().done()
或setInterval()
。即使它导致无限循环,即使它阻止任何其他事件被处理很长时间。
这可能吗?我只是想知道Javascript中是否存在某种同步包装浏览器支持的实用程序。我的预感不是,因为这似乎与Javascript的单事件循环性质相反,但我想我会检查:)最终,我的目标是在特定的页面上插入自定义的javascript用户操作,并保证代码将完整执行。
请注意,我不需要使用jquery.html()
或<script>
注入,这只是我的起点。也许我能做的最好的事情是告诉客户端在代码完成时调用一个特定的预定义回调函数,并确保在调用此函数之前我不更改窗口?
答案 0 :(得分:1)
在Javascript中,你不能“等待块中的代码完成执行,然后再将执行释放回主事件循环”。这根本无法做到。
如果做得好,您可以使用onload
处理程序插入脚本标记,以便在这些脚本完成加载并完成同步执行(但不是异步执行)时通知(通过回调)。
如果您想知道这些脚本中的异步执行何时完成,您必须在这些脚本中构建一些内容,以便在完成后通知您。
如果您要使用jQuery的.html()
来执行脚本标记注入,那么您将失去对此过程的大量控制权,并且它会成为一个黑客攻击项目,试图找出您可以从进程外部执行的操作。
在所有情况下,你都无法阻止继续执行javascript的主事件循环,同时等待这一切完成。