决定是否禁用/启用javascript并执行服务器端代码

时间:2012-10-12 09:52:10

标签: c# jquery asp.net ajax browser

  

可能重复:
  redirect to another page if javascript is disabled

我有一个aspx页面,在检测到客户端的屏幕大小后会加载几个图像。我是这样做的: 在jquery代码中,我首先检测用户屏幕大小,然后根据大小,我做一些计算来决定从数据库中提取的图像数量。然后使用jquery ajax,我调用一个返回json响应的Web服务。代码选择json并创建页面。

现在,如果用户已禁用javascript,则此方法无效。现在我必须在后面的代码上使用c#代码创建页面。问题是,我无法检测是否从后面的代码中禁用了javascript(我认为这是不可能的)。我不想在顶部显示一个按钮,说“在浏览器中禁用Javascript。请点击此处显示此页面”。我可以把这个按钮放在noscript标签中。但我不希望用户在看到页面上的图像之前必须单击按钮。

我想要的是,如果禁用了javascript,系统应该检测它并立即从代码后面运行一个函数。 (在这种情况下,页面大小将是固定的,并且不会根据用户屏幕而变化)我不能使用隐藏字段或cookie来检测它,因为它们在检测到javascript被禁用之前都需要回发。 (我们知道js代码无法在任何页面生命周期事件之前运行。)

好吧,我不太希望我的问题能够得到解决,但我仍然想尝试一下。可能有人已经有了解决方案。如果您能提出改变/更新逻辑的观点或建议,将会非常有帮助。

非常感谢任何帮助。

谢谢和问候 普利文

2 个答案:

答案 0 :(得分:1)

1。)使用JavaScript设置cookie,然后在后续页面查看时使用服务器端脚本测试该cookie;适当地传达内容。

<强> How to detect if JavaScript is disabled?

2.。)您可以使用 <noscript>代码

<noscript>标记:可用于为浏览器中已禁用脚本或浏览器不支持客户端脚本的用户提供备用内容。< / p>

<noscript>
    ....
</noscript>

3。) Detect if JavaScript is enabled in ASPX

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["JSChecked"] == null)
    //JSChecked -indicates if it tried to run the javascript version
    {
        // prevent infinite loop
        Session["JSChecked"] = "Checked";
        string path = Request.Url + "?JScript=1";
        Page.ClientScript.RegisterStartupScript(this.GetType(), "redirect", 
          "window.location.href='" + path + "';", true);
    }
    if (Request.QueryString["JScript"] == null)
        Response.Write("JavaScript is not enabled.");
    else
        Response.Write("JavaScript is enabled.");
}

答案 1 :(得分:0)

在没有javascript的情况下制作默认版本,如果启用了javascript,则重定向到javascript版本。 How to redirect if javaScript is disabled?