目前,我正在使用带有ASP.NET webforms的fineuploader,并且在FireFox中遇到了一个严格模式的问题。ASP.NET webforms有一个javascript文件(microsoftajaxwebforms.js),其中包含以下代码(用于回发到服务器并调用传递的事件ex )。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
的原因。我相信解决方案是将use strict
从fineuploader.js中删除,但我担心这会如何影响其他浏览器中的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
引用的代码之外的任何内容。我很感谢你的帮助。
发布于 2015-03-27 08:45:58
根据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最终在两年前删除了use strict
,所以升级jQuery (如果可能的话)也应该解决这个问题。
https://stackoverflow.com/questions/26718805
复制