【发布时间】:2014-11-03 16:43:36
【问题描述】:
我目前正在将 Fineuploader 与 ASP.NET 网络表单一起使用,并且在 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 引用的代码以外的任何内容。感谢您的帮助。
【问题讨论】:
-
从 Fine Uploader 中删除严格模式字符串应该没有问题,但我建议您不要走那条路。事实上,在不准备自己拥有的情况下修改任何第三方代码通常是可以避免的。我已将您的问题标记为另一个类似问题的副本。有关更好的解决方案,请参阅 Kangax 的答案。
-
@RayNicholus 这真的很有帮助。我不确定如何将其应用于
bind事件。多一点方向将不胜感激。 -
__doPostBack在哪里声明?此外,您的问题代码中有两种不同的拼写方式。 -
拼写是问题而不是代码中的拼写错误。
__doPostBack' is declared inMicrosoftAjaxWebForms.js`,它是 ASP.NET Ajax 的一部分。如果我理解正确的话,它是一个与 WebForms 一起打包的库。
标签: javascript c# asp.net webforms fine-uploader