【问题标题】:Detect if user opens link in new tab and redirect to new url [duplicate]检测用户是否在新选项卡中打开链接并重定向到新网址 [重复]
【发布时间】:2016-07-29 13:20:48
【问题描述】:

我正在尝试做一些我不确定是否可行的事情?

用户打开网站。如果他们尝试在新选项卡中重新打开链接,我需要将他们重定向到另一个页面。

我尝试使用c# 来查看是否可以检测到页面重新加载。这可行,但是如果我出于某种原因将代码放入页面加载事件中,它会运行两次,并且无论是第一次打开还是在新选项卡中打开,都会重定向它们。只有当他们打开一个新标签时我才需要这样做。

我的代码:

bool IsPageRefresh = false;
if (!IsPostBack)
{
  ViewState["ViewStateId"] = System.Guid.NewGuid().ToString();
  Session["SessionId"] = ViewState["ViewStateId"].ToString();
}
else
{
  if (ViewState["ViewStateId"].ToString() != Session["SessionID"].ToString()) ;
  {
    IsPageRefresh = true;
    if (IsPageRefresh == true)
    {
      Response.Redirect("~/Pages/EstimateList.aspx", true);
    }
  }
  Session["SessionId"] = System.Guid.NewGuid().ToString();
  ViewState["ViewStateId"] = Session["SessionId"].ToString();
}

我需要使用JavascriptjQuery 来执行此操作吗?我对JavascriptjQuery 真的很陌生。

【问题讨论】:

  • 虽然您可能可以一起破解一些东西来做到这一点,但您可能要做的就是通过做一些他们意想不到的事情来激怒用户。
  • 我怀疑你能做到这一点。当然不是服务器端,我想 JS 会在浏览器中限制这个功能,因为它很烦人并且可能被滥用
  • 我没有得到你想要的。如果用户在地址栏中再次键入,或者您只是不想打开同一页面的 2 个选项卡,这有关系吗?
  • Ashkan,我只是不想让他们在新标签页中打开它。
  • 您意识到这是一种多么糟糕的用户体验吗?

标签: javascript c# jquery asp.net


【解决方案1】:

您可以使用 cookie。当用户第一次打开页面时,您会向计算机发送一个 cookie 说 PageOpened=true ,当用户在新选项卡中打开它时,检查是否有 cookie with PageOpened=true,如果有,请在浏览器中打开您的其他链接。

您可以给您的 cookie 一个时间限制,或者在第一个站点关闭或用户打开新标签等时销毁它们。

我无法为您提供代码,因为我从未在 web 上使用过 c#,但这应该可以让您了解解决方案的可能路线。

P.S.:作为用户,我也会觉得这很烦人,但那是你的决定。

【讨论】:

【解决方案2】:

你可以试试这个

if(Request.Cookies["isPageRefresh"] == null)
{
   Response.Cookies["isPageRefresh"].Value = "true";
   Response.Cookies["isPageRefresh"].Expires = DateTime.Now.AddDays(1);

}
if (!IsPostBack) 
{                  
 if (Server.HtmlEncode(Request.Cookies["isPageRefresh"].Value== "false") 
 { 
   Response.Redirect("~/Pages/EstimateList.aspx", true);
 } 
 //enter some code
}
  Response.Cookies["isPageRefresh"].Value = "false";
  //enter some code

因为在每个新选项卡上单击 asp 将其理解为新请求。如果重定向错误,您应该使用 cookie 检查 isPageRefresh 或使用没有重定向效果的全局变量,如缓存变量值

【讨论】:

  • 嗨 Syuash,IsPageRefresh = true;在 if (!IsPostBack) 内。
  • 是并使用 bool IsPageRefresh = false;不在 load_page 方法中
  • 苏亚什,我不明白?如果不在页面加载中,我需要放在哪里?
  • isPageRefresh=true; if (!IsPostBack) { if (IsPageRefresh == true) { Response.Redirect("~/Pages/EstimateList.aspx", true); } } 其他 { IsPageRefresh = false; } 因为在每个新选项卡上单击 asp 将其理解为一个新请求,如果您也应该使用 cookie 来检查 isPageRefresh }
  • 为什么不直接编辑你的答案呢?以上基本看不懂
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 2012-05-03
  • 1970-01-01
  • 2023-03-10
  • 2022-01-15
  • 2018-02-12
  • 2012-01-15
  • 2014-10-06
相关资源
最近更新 更多