如果用户位于我的角度平台中,则当用户单击浏览器的后退按钮时,我想将用户带到主页。
还有一个边缘情况需要处理, 如果用户已通过Google搜索,Fb或直接输入链接进入我们的平台,则我们无法执行此操作,但是如果他已经在我们的平台中漫游,那么我们不希望每个后退按钮都将用户带回家。
即
用户输入链接,然后按按钮=>将他带回家。
用户输入链接,然后单击按钮或链接,并且应用程序状态已更改,现在用户单击浏览器后退按钮=>将用户带回previos页面(正常行为)
演示: 单击下面的链接,然后在Google搜索上单击第一个链接,然后尝试按浏览器的后退按钮,您会看到它带您进入主页。
我尝试使用pushState()实现它
ngAfterViewInit() {
console.log('init called');
var x = document.referrer;
console.log('ref', x);
console.log(this.angLocation.path());
if (x) {
console.log('pushing state');
this.location.pushState({id:'page3'}, 'Page3', '/page3');
}
}
点击下面的链接,查看其运行情况 https://angular-tet5fy.stackblitz.io/page2?fbclid=IwAR1zP_UTnCQxKMp8o3ZXf-n4NR3ftu_4JoulLqItaONa-_wSPJ_DT95OgRU
预期的行为: 1.单击链接将用户带到第2页。 2.初始化page2时,应将状态'/ page3'推入浏览器历史记录。 3.当用户现在单击浏览器时,它应该进入/ page3,因为它已在上面的步骤2中被推到历史记录中。
当前行为: 1.单击链接,将我带到page2,但是在推送状态时它会自动重定向到/ page3。 2.单击浏览器后,将我带回到/ page2。
答案 0 :(得分:0)
您可以使用history.pushState(null, null, 'https://twitter.com/hello');
并将应用程序的首页链接作为第三个参数传递。在这种情况下,按返回将把用户移到主页。
在这里看看; window.history API
或者:css-tricks
答案 1 :(得分:0)
他们在该页面上所做的事情有些棘手。
诀窍是使用history.pushState
创建新的历史记录,然后订阅该位置的pop事件以将网页更改为主页。
我建议做一些不同且更容易的事情,该代码只需要以下几行:
let locat = location.href;
if (!!window.location.pathname && window.location.pathname !== '/') {
history.replaceState(null,null,location.origin);
history.pushState(null, null,locat);
}
我们在这里所做的是使用history.replaceState(null,null,location.origin);
将URL更改为您想要的房屋,然后使用history.pushState(null, null,locat);
在第一个URL中重新输入历史记录。
此处的示例:
https://stackblitz.com/edit/angular-stack-home-redirect-history?file=src/app/app.component.ts
在这里尝试: https://angular-stack-home-redirect-history.stackblitz.io/bye