假设我的用户通常会通过https://www.mycompany.com/go/mybusinessname
访问我们的网页在此网页中,我们有一个实际来自https://www.mycompany.com/myapp
的iframe一切正常,但如果出于某种原因,用户会了解此网址https://www.mycompany.com/myapp。他们可以通过在地址栏中输入来直接开始访问它。
这是我想阻止他们做的事情。有没有最佳实践来实现这一目标?
====更新以提供更多背景信息====
https://www.mycompany.com的父页面是公司的页面,由其他团队维护。因此,它们具有所有通用页眉和页脚等,因此每个应用程序都在其中呈现为iframe。 (这也意味着我们无法更改父页面的代码)
如果用户直接访问https://www.mycompany.com/myapp,他们将无法看到页眉和页脚。是的,这不是什么大问题,但我只是想保持一致性。
我关心的另一个问题是,在我们的开发环境中(也就是在本地运行页面时),我们没有parent-iframe。我们直接从http://localhost:port访问我们的页面。因此,我想找到一个解决方案,允许我们在本地运行时正常访问它。
如果这种解决方案不存在,请告诉我:)
答案 0 :(得分:4)
在iframe的源代码中,您可以使用window.top.location检查父窗口,看看它是否设置为“https://www.mycompany.com/go/mybusinessname”。如果没有,请重定向页面。
var myUrl = 'https://www.mycompany.com/go/mybusinessname';
if(window.top.location.href !== myUrl) {
window.top.location.href = myUrl;
}
答案 1 :(得分:0)
我意识到我们已经有了一个函数来确定页面是否在https://www.mycompany.com下运行。所以现在我只需要执行以下操作,当我们的页面不是iframe
时执行重定向var expectedPathname = "/go/mybusinessname";
var getLocation = function (href) {
var l = document.createElement("a");
l.href = href;
return l;
};
if (window == window.top) { // if not iframe
var link = getLocation(window.top.location.href);
if (link.pathname !== expectedPathname) {
link.pathname = expectedPathname;
window.top.location.replace(link.href);
}
}
答案 2 :(得分:-1)
您可以在服务器端使用HTTP referer
标头。如果在IFRAME中打开页面 - referer
包含父页面地址。否则,它为空或包含不同的页面。