我可以知道人们何时在新标签中打开我网站上的链接?

时间:2011-11-02 12:55:53

标签: php session tabs browser-history

我想知道的是,当人们点击我的网站上的链接(内部链接 - 而不是其他网站)时,如果他们只是点击它或按住Ctrl键点击它(或右键单击 - 在新标签页中打开)。 / p>

我使用PHP。

所以例子: 人在第1页上,然后单击第2页的链接。 当他们在第2页时,我想知道他们来自哪里(_server ['http_referer']给了我),但我也想知道他们是否在新窗口/选项卡中打开了页面。我需要知道这一点,因为页面上有历史记录后退按钮。

这样做的原因是要了解网站周围的浏览历史记录 - 我创建会话以跟踪浏览历史记录(这样我可以返回一页,两页返回或任何给定时间返回三页)但我不知道不希望会话在选项卡之间发生冲突,以便每个选项卡都有自己的浏览历史记录。这就是为什么我需要为每个打开的标签创建新会话。


我发现作为我的问题的可能解决方案是使用类似于此的javascript:

<script>
var history_status = history.length;
var referrer_site = document.referrer;

if(history_status > 1 && referrer_site != "") {
    alert(referrer_site);
} else {
    alert('No referrer site');
}
</script>

我需要更改一点,但这是我的第一个检查它是否有效的演示(它确实如此)

我首先需要查找浏览器用户正在使用的内容,因为当您使用IE时,history_status为历史记录中的第一页提供0,如果您使用的是Firefox或Chrome,则为1。

2 个答案:

答案 0 :(得分:1)

这听起来不像是良好的用户体验。后退按钮和允许人们打开新标签是用户期望以某种方式表现的东西。我个人觉得很沮丧。如果新选项卡无法仅为该选项卡形成自己独特的浏览历史记录,那么它有什么意义呢?

如果你真的真的想这样做。创建一个带有数字的cookie,在每个页面上加载提升数字,并将页面URL存储在数据库中以用于该会话。在页面加载时,拉入thr历史记录并通过JavaScript将其加载到浏览器历史记录中。 Eeek。

答案 1 :(得分:1)

由于该问题确实很老,我将举例说明这个问题,以使其更加清楚。希望我也不会误解所提出的问题。

案例:
 -我有一个网站。该网站有一个表格。该表格位于2个(或更多)网页上:表格p001 表格p002 (... 表格pX )。
 -在 p001表格的页面上,有一个按钮,具有指向 p002表格所在页面的链接。
 -在表单最后一部分的页面上(以我的情况为 p002 ),有一个提交按钮。单击“提交”按钮会将您重定向到我的网站上的页面,或者单击该按钮将您重定向到页面 p001 上的页面或之前的页面您已加载页面表格p001
 -想象以下3个 example 案例(显然,为了简短起见,可能存在3个以上的案例)。 enter image description here

  
      
  • 示例01:我在网站的第X页上。表单上有按钮,我单击此按钮,然后转到表单页面第1部分(表单p001)。我单击按钮 Part-02 进入具有(表单p002)形式的第2部分的页面。完成表单的第二部分后,单击“提交”。这会将我重定向到我的网站上的第X页
  •   
  • 示例02:浏览了我网站上的多个页面后,我现在位于 Page Y 上。表单上有一个按钮,我右键单击它,然后在新选项卡(选项卡02)中打开表单页面的第1部分(表单p001)。我单击按钮 Part-02 进入具有(表单p002)形式的第2部分的页面。完成表单的第二部分后,单击“提交”。这会将我重定向到我网站上的 Page Y (在标签02中)。
  •   
  • 示例03:浏览了我网站上的多个页面后,我现在进入了 Page Z 页面。表单上有一个按钮,我右键单击它,然后在新选项卡(选项卡02)中打开表单页面的第1部分(表单p001)。我右键单击按钮 Part-02 ,在新标签页(标签03)内进入具有(Form p002)形式的第2部分的页面。完成表单的第二部分后,单击“提交”。这会将我重定向回我网站上的 Page Z (在标签03中)。
  •   

如果该人已加载表单的第一页(p001表单),则将表单页面的链接直接放在浏览器的LOCATION / ADDRESS栏的新标签或窗口中,则我们假定您将被重定向到主页。这与这个问题无关紧要。

回答: 您可以使用 window.localStorage document.referrer
您可以使用window.localStorage存储原始页面,该页面是我进入网站第一页之前的网站位置。测试以下代码。

somePageOnMyWebsite.html (第X,Y或Z页)

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
    <h1>A Random page on My Website</h1>
    <p>My paragraph.</p>
    <a type="button" href="formp001.html" target="_blank">Click to form</a>
</body>
</html>


formp001.html

<!DOCTYPE html>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
        $(document).ready(function(){
            var originalPage = document.referrer;
            if( originalPage != null)
                window.localStorage.setItem("redirectPage", originalPage);
            else
                window.localStorage.setItem("redirectPage", "");
        });
    </script>
</head>
<body>
    <h1>Form p001</h1>
    <form action="formp002.html" target="_self" method="post">
        <input type="submit" value="Go to Form p002" />
    </form>
</body>
</html>


formp002.html

<!DOCTYPE html>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
        $(document).ready(function(){
            if (window.localStorage.getItem("redirectPage") === null || window.localStorage.getItem("redirectPage") === ""){
                // The form was not accessed by clicking on a link on a page on my website, so just redirect to my homepage ...
                document.getElementsByTagName("FORM")[0].setAttribute("action", "./hometest.html");
            } else{
                document.getElementsByTagName("FORM")[0].setAttribute("action", window.localStorage.redirectPage);
            }
        });
    </script>
</head>
<body>
    <h1>Form p002</h1>
    <form action="#" target="_self" method="post">
        <input type="submit" value="Submit" />
    </form>
</body>
</html>


hometest.html (我网站的首页)

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
    <h1>HOME PAGE</h1>
    <p>My home</p>
</body>
</html>



我的答案基于birgir对 Luc的答案的评论。