【问题标题】:How do I call javascript just before a response redirect如何在响应重定向之前调用 javascript
【发布时间】:2009-03-12 17:39:38
【问题描述】:

我正在尝试在页面重定向之前运行一些 java 脚本,但它无法运行。 当我注释掉 Response.Redirect 时,一切正常,但这违反了特定要求。有关如何实现此功能的任何想法?

        Dim strscript As String = "<script>alert('hello');</script>"

        If Not ClientScript.IsClientScriptBlockRegistered("clientscript") Then
            ClientScript.RegisterStartupScript(Me.GetType(), "clientscript", strscript)
        End If

        Response.Redirect("http://www.google.com")  

【问题讨论】:

    标签: asp.net javascript vb.net asp.net-2.0


    【解决方案1】:

    您的问题是 Response.Redirect 在将任何内容发送回客户端之前重定向响应(...)。所以客户端得到的是来自谷歌而不是你的服务器的响应。

    为了在页面上编写一些 javascript 并在将客户端发送到 Google 之前执行它,您需要在警报之后在 javascript 中进行重定向。

       Dim strscript As String = "<script>alert('hello');window.location.href='http://www.google.com'</script>"
    
       If Not ClientScript.IsClientScriptBlockRegistered("clientscript") Then
           ClientScript.RegisterStartupScript(Me.GetType(), "clientscript", strscript)
       End If
    

    【讨论】:

      【解决方案2】:

      客户端没有机会加载。尝试从客户端重定向:

      Dim strscript As String = "<script>alert('hello');window.location.href("http://www.google.com");</script>"
      
      If Not ClientScript.IsClientScriptBlockRegistered("clientscript") Then
         ClientScript.RegisterStartupScript(Me.GetType(), "clientscript", strscript)
      End If
      

      【讨论】:

        【解决方案3】:

        如果您想在重定向之前执行一些 javascript,您需要在 javascript 而不是 ASP.NET 中执行重定向。

        Dim strscript As String = "<script>alert('hello'); window.location.href='http://www.google.com';</script>"
        
        If Not ClientScript.IsClientScriptBlockRegistered("clientscript") Then
            ClientScript.RegisterStartupScript(Me.GetType(), "clientscript", strscript)
        End If
        

        【讨论】:

          【解决方案4】:

          不工作:

          string sScript = "<script language='javascript'>alert(\"" + Alertstr + "\");  alert('Record has been Updated Successfully'); </script>";
          ClientScript.RegisterStartupScript(typeof(Page), "alert", sScript);
          response.redirect("LandingPage.aspx");
          

          工作:

          string sScript = "<script language='javascript'>alert(\"" + Alertstr + "\");  alert('Record has been Updated Successfully'); window.location.href = 'LandingPage.aspx'; </script>";
          ClientScript.RegisterStartupScript(typeof(Page), "alert", sScript);
          

          【讨论】:

            【解决方案5】:

            如果您使用 Response.Redirect,它实际上会向浏览器发送3XX response,这会导致浏览器向重定向中的 URL 发送请求。它实际上不会加载/呈现响应中包含的任何数据(实际上我认为没有发送任何数据)。如果您希望它在页面加载后重定向,您可能需要包含 META refresh header 以在加载后重定向一定时间,或者在脚本末尾使用 javascript do 进行重定向。

            【讨论】:

            • 实际上,重定向会发送一个“页面移动”页面以及 3xx 代码。如果您进入永久重定向循环并且浏览器在大约 20 次重定向后放弃,这就是浏览器显示的内容。
            • 可以发送带有 3xx 状态码的自己的响应正文,但 99.9% 的用户不会看到它(因为他们的浏览器会重定向而不呈现它)。我通常会发送一个与重定向目的地相同的链接,用于那些没有自动重定向的不幸灵魂。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-11-21
            • 1970-01-01
            • 2021-12-23
            • 2010-11-02
            • 2020-07-18
            • 2019-05-19
            • 1970-01-01
            相关资源
            最近更新 更多