我目前正在使用带有ASP.NET Webforms的fineuploader,并且在FireFox中遇到严格模式问题。 ASP.NET Webforms具有一个包含以下代码的javascript文件(microsoftajaxwebforms.js)(该代码用于回发到服务器并调用传递的事件,例如下面的Save
。):
_doPostBack: function(a, k) {
var f = window.event;
if (!f) {
var d = arguments.callee ? arguments.callee.caller : null;
if (d) {
var j = 30;
while (d.arguments.callee.caller && --j) d = d.arguments.callee.caller;
f = j && d.arguments.length ? d.arguments[0] : null
}
}
...
该函数在我正在使用的代码库中广泛使用。我不能更改此代码,因为它会在产品的其余部分产生意外的副作用。问题出在
arguments.callee.caller
上。这就是引发错误access to strict mode caller function is censored
的原因。我相信解决方案是从fineuploader.js中删除use strict
,但是我担心这可能会影响其他浏览器中的fineuploader。我对javascript中的严格模式不熟悉,因此也许有人可以阐明从fineuploader.js中删除严格模式的可能的副作用。作为参考,这里是fineuploader函数,该函数最终调用上述代码并导致错误。var fineUploader = $('#jquery-wrapped-fine-uploader').fineUploader({
...
multiple: false,
text: {
uploadButton: 'Click or drag a file to upload.'
},
autoUpload: false,
debug: false,
template: 'fineuploader-template',
...
}
}).bind('complete', function (event, id, name, response) {
if (response['success']) {
cp_hide();
fineUploader.fineUploader('reset');
__doPostBack("Save", "");
}
})...
如果需要,我可以修改
microsoftajaxwebforms.js
引用的代码以外的任何内容。感谢您的帮助。 最佳答案
根据jQuery票证(http://bugs.jquery.com/ticket/13335)的解决方法是在客户端手动调用事件,而不是直接调用__doPostBack
。
$('#Save').trigger('click');
但是,如果您尝试从客户端事件中触发回发,则
trigger
选项将不起作用。相反,您可以使用丑陋但可靠的setTimeout
退出strict
模式。$('#Save').on('click', function(e) {
var result = doSomeStuff();
if(result.success) {
window.setTimeout(function() { __doPostBack('Save', '') }, 5);
}
// ...
});
jQuery最终于2年前删除了
use strict
,因此升级jQuery(如果可能)也应该可以解决该问题。