除了使用eval/handleAs之外,还有其他方法吗?动态获取脚本(通过XMLHttpRequest)
Is there any way, other than to use eval/handleAs: "javascript" to dynamically fetch scripts (via XMLHttpRequest)
在这里,我问了一个关于通过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之类的东西)。
如果脚本是固定的,您还可以考虑通过包含它们的脚本标签并在您认为合适的情况下部署它们来调试它们。
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 有没有一种方法可以用YepNope.js为脚本提供动态名称
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 离子滑块 - 有一种方法可以动态更改间隔
- 如何在jQuery的.on()方法中动态更新按钮的ID选择器
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- jQuery .change() 方法不适用于动态创建的复选框
- 在我的上下文中添加对象的动态方法
- Javascript:添加动态方法
- 使用 javascript/nodejs 创建动态方法
- 从带有参数的字符串进行动态方法调用 - node.js
- Python动态方法
- JavaScript对象上的动态方法
- 如何在data-ng-click中传递调用动态方法而不是静态方法(即想要传递要调用的方法而不是固定的delete()方法
- JS: json,动态方法的创建和闭包
- 来自ES6中的类的动态方法调用