如何在不使用eval()的情况下从服务器动态加载和执行Javascript?

我正在编写一个PHP框架,它允许PHP开发人员使用PHP类创建带有表单,网格,tabpanel和菜单的ExtJS接口。 例如,为了创建TabPanel,PHP类实例化了一个URL数组,当用户单击选项卡标题时,这些URL会动态加载。 为了做到这一点,我使用以下Javascript函数,它通过AJAX调用加载PHP页面并执行其中的任何脚本。
function loadViewViaAjax(url) {
    Ext.Ajax.request({
        url: url,
        success: function(objServerResponse) {
            var responseText = objServerResponse.responseText;
            var scripts, scriptsFinder=/<script[^>]*>([sS]+)</script>/gi;
            while(scripts=scriptsFinder.exec(responseText)) {
                eval(scripts[1]);
            }
        }
    });
}
我经常在这个问题的答案中读到,通常不需要使用eval(),因为你需要用eval()做的事情通常可以通过其他方式来实现。我也理解在通过AJAX加载的PHP页面中执行脚本会带来安全风险,需要以其他方式锁定,所以我想找到另一种更安全的方法来做到这一点。 在没有eval()的情况下从服务器动态加载和执行javascript的替代方法是什么,这样我就可以使用与上面脚本相同的功能,即TabPanels只在选项卡上加载和执行来自服务器的Javascript点击标题?     
已邀请:
您始终可以通过脚本注入加载其他Javascript。如果您创建一个新的SCRIPT元素并将其放在DOM中,浏览器将下载该脚本并执行它。 作为简化示例,您可以使用:
var newScript = document.createElement('script'); 
newScript.setAttribute('src', 'http://www.example.com/url/of/your/script.php'); 
document.body.appendChild(newScript); 
如果您想要更安全的方法,我建议研究“JSONP”。     
您可以在服务器响应中返回脚本的文件URL(甚至是临时文件)。使用此URL,您可以动态地将这些脚本添加到您的头脑中。如果这很复杂,您还可以返回文本并通过以下方式包含此内容:
var head = document.getElementsByTagName('head').item(0);
var script = document.createElement('script');
    script.language = "javascript";
    script.type = "text/javascript";
    script.id = "script-id";
    script.defer = true;
    script.text = source;

    head.appendChild(script);
我希望这有帮助。     
eval的替代方法,即使它不是更安全的是将代码包装在函数体中并调用该函数。
var body = "you source here";

var f = Function(body);

f();
这可用于加载可重用的代码段。     

要回复问题请先登录注册