强制ASP.NET为所有用户代理生成JavaScript

Ada*_*dam 8 javascript asp.net postback dopostback

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

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

这类似于这个问题:ASP.net没有为某些用户代理生成javascript,但如果我正确地阅读它,看起来你会逐个修复每个无法识别的用户代理并将其作为另一个浏览器屏蔽.我对单个用户代理的关注较少,而且总体而言,某些用户代理将无法使用我的应用程序并且我不会知道它,因为错误发生在javascript而不是服务器上.

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

Ari*_*tos 4

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

您需要更改的行(在本例中使用 javascript)是:

        <capability name="jscriptversion"       value="5.6" />
        <capability name="javascript"           value="true" />
        <capability name="javascriptversion"    value="1.5" />
Run Code Online (Sandbox Code Playgroud)

默认情况下,javascript行如果为false。我想在这里评论一下,我不太确定您是否真的需要更改它,如果有人欺骗用户代理,那就让它这样做。如果他喜欢您的网站并且需要使用它,那么最好让您知道如何处理他使用的浏览器。另一方面,如果可能的话,您必须小心,即使没有 JavaScript,您的网站也能正常工作,至少对于您所做的大部分操作来说是这样。

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

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

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