除了使用eval/handleAs之外,还有其他方法吗?动态获取脚本(通过XMLHttpRequest)

Is there any way, other than to use eval/handleAs: "javascript" to dynamically fetch scripts (via XMLHttpRequest)

本文关键字:动态 方法 获取 脚本 XMLHttpRequest 通过 其他 eval handleAs 之外      更新时间:2023-09-26

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

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

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

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

它不能保证像eval与同步XHR一样是同步的,但理想情况下,您应该构建代码以利用异步。

补充Mike的回答,如果您想要良好的调试器支持,包括脚本标记可能是可行的方法,因为这是调试器习惯的工作方式。您需要注意的与eval的主要区别是:

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

如果脚本是固定的,您还可以考虑通过包含它们的脚本标签并在您认为合适的情况下部署它们来调试它们。