有什么办法,除了使用eval / handleAs:“javascript”来动态获取脚本(通过XMLHttpRequest)

时间:2011-10-23 23:13:26

标签: javascript exception xmlhttprequest eval

Here我问了一个关于通过XMLHttpRequest动态加载脚本时引发的异常的问题(换句话说,当通过eval执行时)

在一个相关的问题中,我想知道是否动态加载脚本是开始时被认为是不好的做法。在我的特定情况下,我有一个HTML Canvas元素,而不是加载所有可能的形状,我想动态地获取它们,而无需重新加载页面,并在返回时执行它们。我遇到的问题是,如果与该形状相关联的代码不正确,则显示的错误消息不是很有用(表示eval语句的位置,而不是错误的语句)。是否有另一种方法可以从服务器动态获取代码并执行它,同时在异常发生时更好地通知异常的位置。

2 个答案:

答案 0 :(得分:2)

如果要加载脚本,请使用<script>元素。如果要动态加载脚本,请动态创建<script>元素。

var script = document.createElement('SCRIPT');
script.src = "<url to load>";
document.getElementsByTagName("HEAD")[0].appendChild(script);

不能保证与同步XHR的eval同步,但理想情况下,您需要构建代码以利用异步。

答案 1 :(得分:1)

添加Mike的答案,如果你想要包括脚本标签在内的良好的调试器支持可能是要走的路,因为那是调试器用来处理的问题。您需要注意的与eval的主要区别是:

  • Eval在其调用的范围内运行,同时包含脚本标记在全局范围内运行。
  • Eval是同步的,而包含的标签是异步运行的。 (如果需要在脚本标记完成后运行代码,则需要使用JSONPdojo.io.script之类的内容。

如果脚本已修复,您还可以考虑通过包含脚本标记并根据需要进行部署来调试它们。