Javascript 若用户来自网站上的上一页,那个么这个,否则就这样做

Javascript 若用户来自网站上的上一页,那个么这个,否则就这样做,javascript,php,jquery,Javascript,Php,Jquery,实现以下目标的可行方法是什么: 一个网站有两个页面;父页面和内部页面。如果用户直接通过键入地址或从非父页面的页面中跟随链接进入内部页面,则显示“foo”。如果用户从父页面进入内部页面,则显示“栏” 如果可能的话,我需要在JS中完成。如果不是,PHP是第二选择 请试试这个 此代码位于第二页 jQuery(window).load(function() { if (sessionStorage.getItem('dontLoad') == null) { //show bar }

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

一个网站有两个页面;父页面和内部页面。如果用户直接通过键入地址或从非父页面的页面中跟随链接进入内部页面,则显示“foo”。如果用户从父页面进入内部页面,则显示“栏”


如果可能的话,我需要在JS中完成。如果不是,PHP是第二选择

请试试这个

此代码位于第二页

jQuery(window).load(function() {
  if (sessionStorage.getItem('dontLoad') == null) {
    //show bar
  }
  else{
    //show foo
  }
});
jQuery(window).load(function() {
  sessionStorage.setItem('dontLoad','true') 
});
父页面中的此代码

jQuery(window).load(function() {
  if (sessionStorage.getItem('dontLoad') == null) {
    //show bar
  }
  else{
    //show foo
  }
});
jQuery(window).load(function() {
  sessionStorage.setItem('dontLoad','true') 
});
使用php的

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


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

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

因此,您可以像这样实施您的解决方案:

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

您可以使用document.referer,但这并不总是设置的。您可以向父页面上的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");
}
var fromParent=false;
var Qs=location.search.substring(1);
风险值对=定量拆分(&);
对于(变量i=0;i
这种方法也不是100%万无一失的,因为用户可以键入与父页面链接相同的URL。为了获得更好的准确性,请先检查document.referer,如果没有设置,请使用我上面概述的方法

在使用@Rino-Raj-answer之后,我注意到它需要改进

在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>

$(文档).ready(函数(){
setItem('dontLoad','true');
});
$(文档).ready(函数(){
if(sessionStorage.getItem('dontLoad')==null){
$(“#更多--内容”).removeClass(“隐藏淡入淡出”);
}否则{
$(“#更多--内容”).addClass(“隐藏淡入淡出”);
}
});

正是出于此目的,
$\u服务器['HTTP\u REFERER']已填充。:)如果有多个页面,请使用PHP会话将当前url存储为上一个url,并检查所有页面中的会话值。使用echo basename($_SERVER['PHP_SELF']);获取页面名称。我想您可以这样做:通过父页面中的js或php在输入字段中传递隐藏参数,每当用户单击父页面时,将生成该隐藏值,当它转到内部页面时,您可以在内部页面中检查该隐藏值,若你们发现那个么用户来自父用户,或者来自director,为什么你们不能把foo和bar分成两个页面呢?或者至少添加一个参数来确定是否显示foo或bar?代码中似乎存在语法错误。给我一个空白屏幕。因为我是通过ajax加载内部页面,而不是单独的页面,所以这似乎是最合适的答案,它适用于我的情况。