为了以异步方式从我的服务器加载外部js文件,而不是通过包含在html头部或主体末尾来等待它们加载,我使用jquery.get()来检索那些js将文件作为字符串,转换为带有eval()的对象,并将其作为属性分配给全局变量,即(伪代码):
var globalNameSpace = {};
var data = jquery.get('url/foo.js'); // foo.js returns a function with code
globalNameSpace[foo] = eval(data);
// from here onwards, access code in foo.js as:
globalNameSpace.foo.property;
globalNameSpace.foo.method();
这也意味着我可以显示带有加载栏等的html页面。
问题是,eval()的所有炒作对于不受控制的输入都是危险的,因为这只是从我自己的服务器加载“受控”(尽管可能是错误的:P)脚本(ajax相同的域策略等) ,这比简单地用标签包含js文件更危险,我错过了什么?
答案 0 :(得分:0)
除了通常使用阻止<script>
标记的JavaScript之外,没有其他危险。
但您应该考虑使用async
属性,IE10,Chrome 11,Safari 5和FF 3.6中的is supported,或使用jQuery.getScript将脚本元素注入文档解雇DOM就绪事件。