问题:
document.referrer 获取到的是 iframe 引入模块的 url,而非嵌套这个公共模块的外部 url
解决历程:
现有一个页面,页面中通过 iframe 的方式引入了一个公共模块,如下:
<iframe src="/common/top_page.jsp" width="450" height="27" frameborder="NO" border="0" framespacing="0" scrolling="no" style="z-index:999;float:left;"></iframe>
- 这个公共模块中有一个注册的按钮,点击后跳转到注册的页面,按照目前的逻辑是通过 document.referrer 的方式获取到来源页的,但是业务需要的是嵌套了top_page.jsp的主页面,但是通过以上的方式获取的 url 却是 top_page.jsp
- 通过百度才了解到:iframe 引入的这个页面会被当做一个独立的页面,而嵌套了它的外层页面只是它的来源页,也就说在 top.page.jsp 中通过 request.getHeader("Referer"); 的方式会获取到嵌套了它的外层页面
- 大概了解了上边的问题,接下来就是另一个问题:那么以前的逻辑是怎样实现的?
- 在这个页面中注册链接其实是一个 .jsp 的url,但是因为太卡了,之后修改成了一个新的页面(这个新的页面是一个前后端分离的-‘问题的关键’),然后是在服务端的nginx中对这个链接进行了重定向
- 然后又去找了那个古老的注册页的 jsp,然后发现了问题的所在,注册按钮下的是一个点击事件,然后提交了一个表单,这个是个什么操作?(表单中key 为 req 的 value 值就是动态获取到的嵌套的外层页面 url,这里直接从页面中粘的 url):
//点击事件触发 <a href="#" onclick="ttttttt();">注册</a> //方法中提交的表单 <form name="form2" action="http://center.XXX.com/register.jsp" target="_blank" method="post"> <input type="hidden" name="req" value="http://www.XXX.com/zzz.html"> </form> //方法 function ttttttt(){ //这里有一些其他业务 document.form2.submit(); }
之前的逻辑是怎样接收这个参数的呢?如下:
String req=request.getParameter("req");
上边是通过java代码获取的,但是现在跳转的页面是前后端分离的,我总不能再往页面中搞个Java代码获取一下这个值吧
-
所以只有一个办法了,那就是在公共模块的jsp中,在注册提交的表单(上边的form2)的action属性,也就是跳转地址后拼接一个参数把这个 url 带过去,但是还有一个前提是要注意nginx在做重定向的时候是否会把后边的参数过滤掉
-
至此记录一次前端遇到的问题,如有说的不对的地方,欢迎批评指正!