標籤:
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
window.open a.href開啟視窗referer的問題