如何实现以下需求的可行方法:
一个网站有两个页面:父页面和内部页面。如果用户直接通过输入地址或从非父页面链接跳转到内部页面,则显示“foo”。如果用户是从父页面进入内部页面,则显示“bar”。
如果可能,我需要用JS完成此任务。如果不行,PHP是次选项。
如何实现以下需求的可行方法:
一个网站有两个页面:父页面和内部页面。如果用户直接通过输入地址或从非父页面链接跳转到内部页面,则显示“foo”。如果用户是从父页面进入内部页面,则显示“bar”。
如果可能,我需要用JS完成此任务。如果不行,PHP是次选项。
document.referrer
获取用户来自哪个页面。if (document.referrer === 'yoursite.com/parentpage') {
// do bar
} else {
// do foo
}
请尝试这个
这段代码在第二页中
jQuery(window).load(function() {
if (sessionStorage.getItem('dontLoad') == null) {
//show bar
}
else{
//show foo
}
});
这是父页面的代码
jQuery(window).load(function() {
sessionStorage.setItem('dontLoad','true')
});
使用PHP:
有一种简单的方法是创建一个中介页面,当创建一个会话/cookie后重定向到内部页面。然后,如果您获取了会话/cookie,您就会显示foo并取消会话。
如果有人直接从URL访问,则找不到会话/cookie,它会显示bar。
<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");
}
在使用@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>
$_SERVER['HTTP_REFERER']
才被填充。 :) - Jigar$_SERVER['HTTP_REFERER']
或者像 @Monty 建议的那样,在父页面上传递一个隐藏参数。哪个选项比另一个更合适? - beliy333