【问题标题】:If user came from previous page on site then this, else do this如果用户来自站点上的上一页,则执行此操作,否则执行此操作
【发布时间】:2016-05-17 17:00:38
【问题描述】:

什么是实现以下目标的可行方法:

一个网站有两个页面;父页面和内页。如果用户通过输入地址或通过来自父页面以外的页面的链接直接进入内部页面,则显示“foo”。如果用户从父页面来到内部页面,则显示“栏”。

如果可能的话,我需要在 JS 中完成这项工作。如果没有,PHP 是次要选择。

【问题讨论】:

  • 正是为此目的,$_SERVER['HTTP_REFERER'] 被填充。 :)
  • 如果你有多个页面,使用 PHP Session 将当前 url 存储为上一个,并检查所有页面中的 session 值。使用 echo basename($_SERVER['PHP_SELF']);获取页面名称。
  • 我认为您可以通过以下方式做到这一点:在父页面中由 js 或 php 输入的输入中传递隐藏参数,每当用户单击父页面时,都会生成该隐藏值以及何时转到内页,您可以检查内页中的隐藏值,如果发现则用户来自父级,否则来自直接
  • 为什么不能把 foo 和 bar 分成两页呢?或者至少添加一个参数来确定是否显示 foo 或 bar?

标签: javascript php jquery


【解决方案1】:

intelligent rendering with jQuery

使用@Rino Raj 回答后,我注意到它需要改进。

在 javascript 中,load() 或 onload() 事件通常要慢得多, 因为它会在执行附加功能之前等待所有内容和图像加载。

虽然附加到 jQuery 的 ready() 事件的事件在 DOM 完全加载后立即执行,或者所有标记内容、JavaScript 和 CSS,但不是图像。

让我根据代码解释一下。 当我使用 @Rino Raj 的代码和 load() 事件时,它可以工作,但在第二个/被调用的页面上,内容出现在添加 class="hide fade" 之前(我真的不想要)。

然后我使用 ready() 事件重构了代码,是的, 我打算隐藏/淡出的内容根本没有出现。 按照下面的代码来掌握这个概念。

<!-- Parent/caller page -->
<script type="text/javascript">
  $(document).ready(function() {
    sessionStorage.setItem('dontLoad', 'true');
  });
</script>

<!-- Second/called page -->
<script type="text/javascript">
  $(document).ready(function() {
    if(sessionStorage.getItem('dontLoad') == null) {
      $("#more--content").removeClass("hide fade");
    } else {
      $("#more--content").addClass("hide fade");
    }
  });
</script>

【讨论】:

    【解决方案2】:

    请试试这个

    此代码在第二页

    jQuery(window).load(function() {
      if (sessionStorage.getItem('dontLoad') == null) {
        //show bar
      }
      else{
        //show foo
      }
    });
    

    父页面中的这段代码

    jQuery(window).load(function() {
      sessionStorage.setItem('dontLoad','true') 
    });
    

    【讨论】:

    • 您的代码似乎存在语法错误。给我一个空白屏幕。
    • 因为我是通过 ajax 加载内页而不是单独的页面,所以这似乎是最合适的答案,它适用于我的情况。
    【解决方案3】:

    您可以使用 document.referrer,但这并不总是设置。您可以在父页面的 URL 中添加一个参数,然后在子页面中检查它是否存在

    父页面上的链接:

    <a href='myChildPage.html?fromParent=1'>My Child Page</a>
    

    子页面上的JS代码:

    var fromParent=false;
    var Qs = location.search.substring(1);
    var pairs = Qs.split("&");
    for(var i = 0; i < pairs.length; i++){
        var pos = pairs[i].indexOf('=');
        if(pos!==-1){
            var paramName = pairs[i].substring(0,pos);
            if(paramName==='fromParent'){
                fromParent=true;
                break;
            }
        }
    }
    
    if(fromParent){
        alert("From Parent");
    }else{
        alert("NOT From Parent");
    }
    

    此方法也不是 100% 万无一失的,因为用户可以输入与您的父页面链接相同的 URL。为了获得更好的准确性,请先检查 document.referrer,如果未设置,请使用我上面概述的方法

    【讨论】:

      【解决方案4】:

      您可以使用document.referrer 获取用户来自的页面。

      所以你可以像这样实现你的解决方案:

      if (document.referrer === 'yoursite.com/parentpage') {
        // do bar
      } else {
        // do foo
      }
      

      【讨论】:

        【解决方案5】:

        with php:

        有一种简单的方法是创建一个中介页面,该页面在创建会话/cookie 后重定向到内页。然后如果您将获得会话/cookie,则显示 foo & unset session。

        如果有人直接来自 url,则没有找到会话/cookie 并显示栏..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-19
          • 2021-10-27
          • 2021-02-10
          • 2023-03-09
          • 2014-02-17
          • 1970-01-01
          • 2013-09-04
          • 2011-06-17
          相关资源
          最近更新 更多