使用 ExtJS 2.2.1,我有一个容器元素,它应该使用以下方法从服务器加载一段 HTML:
autoLoad: { url: 'someurl' }
这在 Firefox 中运行良好,但对于 IE7,这会导致 ext-all-debug.js 中的第 7170 行出现语法错误:
this.decode = function(json){
return eval("(" + json + ')');
};
我通过把这个函数变成这个来解决这个问题:
this.decode = function(json){
return eval('(function(){ return json; })()');
};
然后 autoLoad 在两个浏览器中都能正常工作,但是还有一些奇怪的错误,此外,你真的不想在 ExtJS 库中修复这个问题,因为它将无法维护(尤其是在缩小的 ext-all.js 中,它就像一半一行上一兆的 Javascript)。
我还没有找到很多关于这个错误的信息。
我尝试过的变体:
// With <script> tags around all the HTML
autoLoad: { url: 'someurl', scripts: true }
// With <script> tags around all the HTML
autoLoad: { url: 'someurl', scripts: false }
反之亦然,没有<script>
标签。HTML 中也没有任何 Javascript,但应该有可能,因为最终我们将在返回的 HTML 中使用 Javascript。
问题不在 HTML 中,因为即使使用最简单的 HTML,错误也是一样的。
更新 - 对多诺万的回应:
使用它的最简单的情况是这个:
changeRolesForm = new Ext.Panel({
height: 600,
items: [{ autoScroll: true, autoLoad: WMS.Routing.Route("GetRolesList", "User") + '?userID=' + id}]
});
这里不涉及数据存储。响应类型也是text\html
,而不是 json,因此也不能混淆它。如前所述,它在 Firefox 中运行良好,在 Firefox 中,它也执行相同的eval
功能,但没有错误。所以它不像 Firefox 遵循不同的执行路径,它是相同的,但没有eval
.