window.open a.href打開窗口referer的問題


window.open a.href打開窗口referer的問題:

 JSP:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>045index</title>
<style type="text/css">
a {
    border: 1px solid blue;
    margin-left: 5px;
}
</style>
</head>
<body>
    <input type="button" value="window.open:_blank" id="btn001">
    <input type="button" value="window.open:winopen" id="btn002">
    <input type="button" value="window.open:winopen anotherButton" id="btn003">
    <input type="button" value="see how many window open" id="btn004">
    <input type="button" value="close windows opened" id="btn005">
    <!-- a href 打開的窗口對象不能直接獲得到 -->
    <a href="test8.do" target="_blank">a link _blank </a>
    <!-- 如果target對象一致,那么打開的窗口就是一致的 -->
    <a href="test8.do" target="winopen">a link winopen </a>
    <a href="test8.do" target="winopen">a link winopen2 </a>
    <!-- 使用a的click事件進行新窗口的打開,調用button的事件 -->
    <a id="a001" >a link click _blank </a>
    <a href="test8.do" target="winopen" id="a002" >a link click winopen and href </a>
    <script type="text/javascript" src="js/jquery-1.11.1.js"></script>
    <script type="text/javascript" src="b/js/bootstrap.js"></script>
    <script type="text/javascript" src="js/index046.js"></script>
</body>
</html>

 

js:

/**1, 用window.open的時候可以得到打開的窗口對象,可以用來后期關閉;
 * 2, 用a.href可以打開新的窗口,但是得不到打開的窗口對象,后期無法關閉;
 * 3, window.open/a.href的target設置為一個固定值winopen,反復打開的窗口都會是同一個窗口;
 * 4, chrome中window.open/a.href都會有request.getHeader("referer");
 * 5, IE中的window.open沒有referer,a.href會有referer;
 * 6, 用<a href="test8.do" target="winopen" id="a002" >的方式可以hack一下,
 *    window.open的方式如果沒有referer,會顯示空頁面,而a.href會打開同樣的窗口,這個有
 *    referer,會顯示正常的內容;
 */
$(function() {
    $('#btn001').click(btn001Click);
    $('#btn002').click(btn002Click);
    $('#btn003').click(btn003Click);
    $('#btn004').click(btn004Click);
    $('#btn005').click(btn005Click);
    $('#a001').click(btn001Click);
    $('#a002').click(btn002Click);
});
var opens = [];
function btn001Click(e) {
    // 反復點擊會打開新的窗口;
    // 用chrome進行打開,會有request.getHeader("referer")
    // 用IE進行打開,request.getHeader("referer")會是null;
    var open = window.open('test8.do', '_blank');
    // chrome中第一次打開窗體有時無法正確設置title
    // IE中可以正常的設置titile
    open.document.title='a';
    opens.push(open);
    // return false是為了抑制a的默認事件;
    return false;
}
function btn002Click(e) {
    // 反復點擊會打開同一個窗口
    var open = window.open('test8.do', 'winopen');
    // chrome中第一次打開窗體有時無法正確設置title,第二次打開同一個窗體的時候可能會設置正確
    // IE中可以正常的設置titile
    open.document.title='b';
    // 會在opens數組中重復添加相同的窗口對象;
    opens.push(open);
}
function btn003Click(e) {
    // 反復點擊會打開同一個窗口,與btn002Click的窗口一致
    var open = window.open('test8.do', 'winopen');
    // chrome中第一次打開窗體有時無法正確設置title,第二次打開同一個窗體的時候可能會設置正確
    // IE中可以正常的設置titile
    open.document.title='c';
    // 會在opens數組中重復添加相同的窗口對象;
    opens.push(open);
}
function btn004Click(e) {
    console.log(opens);
}
function btn005Click(e) {
    var i = 0, len = opens.length;
    for (i = 0; i < len; i++) {
        console.log(i);
        // 如果數組中有重復對象,在前面已經關閉了,后面重復關閉不會報異常;
        opens[i].close();
    }
}

 

servlet:

package com.stono.servlet;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
public class TestServlet8 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException {
        String referer = req.getHeader("referer");
        System.out.println(referer);
        if(referer == null){
            return ;
        }
        PrintWriter writer = resp.getWriter();
        writer.println("this is from com.stono.servlet.TestServlet8");
    };
}

 

關注一下:a.href的一個坑:http://www.cnblogs.com/iyangyuan/p/3979957.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM