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
window.open a.href打开窗口referer的问题的更多相关文章
- window.open新打开窗口与新开标签页
最近在使用window.open时忽略了一个细节问题:window.open新打开一个窗口,但是有时却是新打开一个窗口有时打开一个新标签页.虽然对一般的需求来说,这个两种情况都无所谓,但是对于那种有强 ...
- 网页中<a>标签新窗口和location.href 新窗口打开
在网页制作过程中,经常遇到新窗口打开,一般是a超级链接或者location.href 新窗口打开形式,下面分别讲述两种之间的不同方式 1,a标签 新窗口 添加属性 target="_blan ...
- js中的window对象:打开窗口
~~ window.open():打开一个窗口 里面需要放三个参数: 1.打开窗口(网页)的位置: 2.打开的方式(自身页面,新开页面): 其中_blank新开一个窗口 3.打开网页的属性: wind ...
- Window.open 实现导航与打开窗口,导航到一个特定链接地址,也可以打开一个新的浏览器窗体
语法 window.open(strUrl,strWindowName,strWindowFeatures ,replace) strUrl: 打开资源的地址 strWindowName: 表示窗体名 ...
- Example001使用window对象打开窗口
<!--实例001使用window对象打开窗口--> <script> <!--使用window对象打开窗口的语法格式如下--> <!--window.ope ...
- JavaScript打开窗口与关闭页面操作大全
JavaScript新开窗口 onClick="javascript:window.location='http://www.sowsoy.com'" JavaScript新开一个 ...
- js如何检测打开窗口是否存在的三个方法?
js打开窗口一般也就是使用window.open方法: win = window.open(CHILD_WINDOW_URL, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTR ...
- window.open浏览器弹出新窗口被拦截—原因分析和解决方案
最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,在本机实验没问题,到了服务器就被拦截了,火狐有拦截提示,360浏览器拦截提示都没有,虽然在自己的环境可以对页面进行放行,但是对用户 ...
- WPF 使用Caliburn.Micro 多线程打开窗口
我们都知道在WPF里面用多线程打开一个窗口很简单.如下 public void ClickMe(object sender) { Thread newWindowThread = new Thread ...
随机推荐
- 2015 HDU 计算机学院 院赛 1003 玩骰子
Problem Description Nias与Ains都特别喜欢玩骰子,而且都自以为比对方玩得更溜. 终于有一天,他们决定用骰子来一决高下! 一般的骰子玩法已经不足以体现他们的水平了,于是 ...
- js实现input button从不可用变为可用
有时候明明是些很简单的东西,因为自己的一些大意,可能就在那圈子里一直兜兜转转,好久都绕不出来. 所以我也愿意把这些很简单的愚蠢写出来,与君共享~ 首先大家知道<input>有一个名叫“bu ...
- Allegro PCB -如何做自定义焊盘
1.如何创建自定义焊盘,比如这种形状的焊盘. (1).打开PCB Editor –>Allegro PCB Design ->New,在类型中选择Shape symbol,并输入名字,比如 ...
- USACO刷题之路
重拾经典 本科生涯结束了,在大学做的ACM竞赛现在基本忘的差不多了.USACO作为一个经典的题库,本来是面向OI选手的,但是由于题目质量很高所以受到大家的好评,所以我这次就从它开始我的刷题之路吧. 由 ...
- apache虚拟目录设置
<VirtualHost *:80> DocumentRoot "/xampp/htdocs/f" ServerName f.e-elitech.net</Vir ...
- Win7下 IIS+PHP(ZendLoader)+MySQL
这里使用的是傻瓜式安装方式 下载php-5.3.18-nts-Win32-VC9-x86.msi,Win7下可执行文件.(下载地址 http://pan.baidu.com/s/1qvJCA) 执行到 ...
- python_json常用的方法
1. 什么是JSON? JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端 ...
- Rest之路 -- 从第二个Rest application里面分析 Rest 方法
引言 在此之前,我们实现了第一个Rest application,通过分析她,我们了解了 Rest 程序的基本要素:这里,我们将会对第一个 Rest application 的功能进行扩充(实现 CR ...
- Android studio中添加外部的jar包
1.下载相关的jar包, 2,将jar包复制到当前module的lib中 3.选择新添加的jar包.右键.add as library 就好啦
- 在阿里云ECS(CentOS6.5)上安装redis
下载所需的redis 命令: wget http://download.redis.io/releases/redis-3.0.7.tar.gz 结果: 解压redis压缩文件: 命令: .tar.g ...