检查是否使用自定义控件启用了JavaScript和 Cookie

分享于 

6分钟阅读

Web开发

  繁體

JavascriptDisabled.JPG

介绍

本文演示如何创建 ASP.NET 自定义服务器控件,以及如何使用它来检查用户的浏览器中是否禁用了JavaScript和 Cookies。

Background

目前,大多数web应用都需要在用户浏览器中启用JavaScript和Cookie才能使它的正常工作。

大多数时候,JavaScript和Cookie在用户的浏览器中被默认启用,所以一切都很好。 如果用户使用浏览器浏览器,那么应用程序就不知道应用程序的运行情况,但是用户在浏览器中的设置时可能会遇到一些奇怪的问题,但用户在浏览器中的设置可能会导致。

为了使用户友好和节省时间,有时需要在用户的浏览器中检查JavaScript和Cookie的设置。 这听起来很简单,但是当你查看这个问题时,你会发现实际上并不是那么容易。

没有方法可以直接检测浏览器的客户端配置。 确实可以使用 HttpRequest::Browser 检查浏览器的功能,但这对你根本没有帮助。

至于 Cookie,找出它是否可用的唯一方法是创建一个 Cookie,然后尝试读取它。 如果你能读,它意味着它被启用了,它被客户端禁用。 在我的代码中,同样的原则。

对于 JavaScript,<noscript> 标签可以用于为在浏览器中禁用脚本的用户提供备用内容。 但是使用 <noscript> 标签只是显示客户端不可以用的机制,所以除了显示消息外,还没有它的他。

所以我的想法是使用用户控件或者自定义控件来让服务器能够知道用户的设置。 因为它可以被不同的项目重用,我更喜欢自定义控件。 我搜索了 Internet,并且找不到这样的控件,这两个控件都是对JavaScript和Cookie进行检查的。 所以我决定自己创造一个。

使用代码

代码相当简单。 名为 BrowserChecker的组件在文件" BrowserChecker.cs"中定义。

HowToUse01.JPG

web表单" Default.aspx"演示了如何使用这里组件。 在这个网页表单是一个按钮,除了提交表单时提交表单。 and这个按钮是当客户端禁用JavaScript或者Cookie时显示信息的标签。 执行检查的时间是加载页面并将它的发送回( 请参阅代码 below ) 时。

protectedvoid Page_Load(object sender, EventArgs e)
{
 if (IsPostBack)
 CheckBrowser();
}

从控件 BrowserJavaScriptStatusBrowserCookieStatus的属性可以知道客户端是否已经禁用了JavaScript或者 Cookie ( 请参阅代码 below )。

privatevoid CheckBrowser()
{
 StringBuilder error = new StringBuilder();
 if (this.BrowserChecker1.BrowserJavaScriptStatus == BrowserStatus.Disabled)
 error.Append(BrowserCheckJavaScript);
 if (this.BrowserChecker1.BrowserCookieStatus == BrowserStatus.Disabled)
 error.Append(BrowserCheckCookie);
 if (error.Length >0)
 this.lblMessage.Text = error.ToString();
}

below 是禁用了JavaScript后单击按钮后的结果。 我使用 IE 7,使用 IE 开发人员工具栏禁用了 JavaScript。

JavascriptDisabled.JPG

below 是禁用Cookie后单击按钮后的结果。 我使用 IE 7,使用 IE 开发人员工具栏禁用了 Cookie。

CookieDisabled.JPG

你还可以在 Firefox 中运行应用程序。 在 Firefox 中,如果不知道如何做,就容易禁用JavaScript或者 Cookie,只要你不知道怎么做就可以了。

在这里我只是展示了。 在实际使用中,可以将检查代码放在应用程序页或者母版页的web登录中。

如果希望在其他项目中重用该组件,只需复制并将文件" BrowserChecker.cs"包含到项目中,然后构建应用程序。 现在在工具箱中,你将找到控件,只需将它的拖到你的web窗体上,就可以使用它了。

HowToUse02.JPG

Points of Interest

代码非常直观。 但我想介绍一些 below。

为了检查Cookie可用性,它尝试在呈现时写入 Cookie,并在发布后再次读取。

为了检查JavaScript可用性,它在呈现时将启动JavaScript的一个隐藏输入和 block 放入。 将执行JavaScript来设置隐藏输入的值。 所以当页面回发时,服务器可以通过检查输入的隐藏值来知道是否禁用了 JavaScript。

控件继承 Control 而不是 WebControl,以使它的尽可能简单。

呈现时,控件检查设计模式,并绕过Cookie设置。

if (DesignMode)
 return;
RegisterScript();
SetCookie();

否则,调用 SetCookie 时,在设计视图中会出现错误,因为 HttpContext 在该情况下不可用。

在回发过程中,我将代码放入 OnInit 而不是 OnLoad 以使之先前填充控件的属性,因这里在。

历史记录

  • 第九个 2010年04月: 初始帖子

相关文章