8

我最近在我的 ASP.NET Web 应用程序中注意到,如果我将用户代理设置为空字符串(使用 FireFox 插件来欺骗用户代理),那么 ASP.NET 将不会生成执行回发所需的 javascript。更具体地说,如果您尝试__doPostBack(a, b)从您的 javascript 调用该函数,您将收到一条错误消息,指出该函数未定义。

我知道每个浏览器都有一个用户代理,所以这种情况不会经常出现,但问题的本质仍然存在:在某些情况下,如果您依赖于无法识别或格式错误的用户代理,可能会使您的 Web 应用程序无法使用回发。

这类似于这个问题:ASP.net not generate javascript for some User Agents,但如果我没看错,看起来你会逐个修复每个无法识别的用户代理并将其屏蔽为另一个浏览器。我不太关心单个用户代理,更关心的是某些用户代理将无法使用我的应用程序并且我不知道这一点,因为错误发生在 javascript 中而不是服务器上。

有谁知道我可以强制 ASP.NET 始终生成所需的 javascript 的方法?

4

1 回答 1

4

如果您将 User Agent 设置为空,或者如果您使用未知的 User Agent 字符串,则 asp.net 会Default.browser从目录中读取文件,Browsers您可以在其中定义您喜欢如何处理这种情况。

您需要更改并在这种情况下使用 javascript 的行是:

        <capability name="jscriptversion"       value="5.6" />
        <capability name="javascript"           value="true" />
        <capability name="javascriptversion"    value="1.5" />

默认情况下,如果为false则为javascript行。我想在这里评论一下,我不太确定您是否真的需要更改它,如果有人欺骗了用户代理,那就让它去做吧。如果他喜欢你的网站并需要使用它,那么最好让你知道如何处理他使用的浏览器。另一方面,如果可能的话,您必须注意,您的网站即使在没有 javascript 的情况下也能正常工作,至少对于您执行的大多数操作而言。

最好避免使用链接按钮(使用 _doPostBack),例如使用回发按钮。我知道 GridView 和其他也使用 _doPostBack 进行分页...可以,但最好是一个即使没有 javascript 也能工作的好网站。

一些类似的问题:
__doPostBack is undefined on DotNetNuke website for IE 10

和这个博客:错误和修复:ASP.NET 无法检测到 IE10 导致 _doPostBack 是未定义的 JavaScript 错误或保持 FF5 滚动条位置

于 2012-12-24T22:54:48.600 回答