js如何检测打开窗口是否存在的三个方法?
js打开窗口一般也就是使用window.open方法:
win = window.open(CHILD_WINDOW_URL, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS);
然后父窗口可以通过win 取得子窗口的引用,然后就可以检测 win是否定义和win.closed来检测窗口是否打开。
但是如果刷新父窗口,父窗口就会失去这些引用,那么我们如何再次检测子窗口是否存在?
我想大概有以下方法:
方法一 使用cookie
打开子窗口的时候,子窗口或者父窗口可以写一个cookie来标示子窗口是否打开,然后子窗口关闭的时候删除这个cookie;这样即使父窗口刷新,cookie依然存在,这样父窗口就可以通过检测cookie的存在来检测子窗口是否存在,子窗口和父窗口可以跨子域。
方法二 本地存储
方法基本和方法一一样,但是子窗口和父窗口不能跨域,因为本地存储不能跨域,子域也不可以。
方法三 window.open
无意发现了这个东东,很好的方法,我试了下兼容性很好,地址:测试地址;
其大体原理如此:
window.open(“”, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS);
通过open一个相同的window名字且地址为空的窗口,通过判断这个窗口的这个地址是否是”about:blank”,如果是,那么这个窗口已经关闭了(前提是前一个打开的地址不是空的)。
win = window.open("", CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS);
if (win.location.href === "about:blank") {
//窗口不存在
win = window.open(CHILD_WINDOW_URL, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS);
} else {
//窗口以已经存在了
win.focus();
}
这是个不错的方法,但是打开子窗口的时候,子窗口不能进行重定位,否则ie下会出现 拒绝访问 的错误,具体的方法看看例子吧。
按照需求各取所需吧。
转:http://hat1231676.blog.163.com/blog/static/931666520133225345033/
js如何检测打开窗口是否存在的三个方法?的更多相关文章
- js二维数组定义和初始化的三种方法总结
js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...
- JS windows.open打开窗口并居中
function openWin() { var url='Add.aspx'; //转向网页的地址; ...
- 原生JS 获取浏览器、窗口、元素等尺寸的方法及注意事项
一.通过浏览器获得屏幕的尺寸 screen.width screen.height screen.availHeight //获取去除状态栏后的屏幕高度 screen.availWidth //获取去 ...
- js各种获取当前窗口页面宽度、高度的方法
alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(document).height()); //浏览器时下窗口文档的高度 alert($(docum ...
- MFC 打开外部EXE文件的三种方法
目前知道三种方式:WinExec,ShellExecute ,CreateProcess,别人已经总结的很好了<vc中调用其他应用程序的方法(函数) winexec,shellexecute , ...
- C#后台调用浏览器打开下载连接地址的三种方法
一.从注册表中读取到本地计算机默认浏览器,然后调用下载. private void button1_Click(object sender, EventArgs e) { //从注册表 ...
- js判断数组中是否有重复值得三种方法
方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...
- JS中把其他类型转换成字符串的三种方法
1.toString()方法 toString()方法返回的是相应值的字符串表现 数值.布尔值.对象和字符串值都有toString()方法,但是null和undefined值没有这个方法 例子: va ...
- JS 在open打开的子窗口页面中调用父窗口页面的JS方法
需求的情景如下: 1:做新增或修改等操作的时候打开一个新的浏览器窗口(使用window.open(参数等)方法) 2:在新增或修改等的页面上有返回按钮.重置按钮.保存按钮,对于返回就直接关闭此窗口(使 ...
随机推荐
- ASP.NET中上传并读取Excel文件数据
在CSDN中,经常有人问如何打开Excel数据库文件.本文通过一个简单的例子,实现读取Excel数据文件. 首先,创建一个Web应用程序项目,在Web页中添加一个DataGrid控件.一个文件控件和一 ...
- android调用系统相机拍照并保存在本地
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- cocos2dx-jsb 跨语言调用及第三方集成 - 过程记录
1:C++中调用js方法: 问题:ios中当用户通过home键将游戏转入后台时,调用js中的暂停游戏方法: AppDelegate::applicationDidEnterBackground() 和 ...
- JB开发之二 [jailbreak,越狱开发研究]
1.更换壁纸:把图片写到这个目录,/var/mobile/Library/LockBackground.jpg,然后kill the Springboard. 2.把程序添加进通知中心(iOS5以上) ...
- LMAX Disruptor – High Performance, Low Latency and Simple Too 转载
原文地址:http://www.symphonious.net/2011/07/11/lmax-disruptor-high-performance-low-latency-and-simple-to ...
- 网络传输速度bps与下载文件所需时间的换算
相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就 ...
- JavaScript随机数
function random(start,end){ var total=start+end; return Manth.floor(Manth.random()+total-start); }
- 如果是除去末尾特定字符或字符串:TrimEnd方法性能优于Remove方法
测试用例--除去末尾特定字符或字符串,Remove方法和TrimEnd方法的比较 结论: 如果是除去末尾特定字符或字符串:TrimEnd方法性能优于Remove方法 具体测试用例如下: Stopwat ...
- C# mvc--EF中查询的本质
UI层我直接用了窗体程序. 好了 不罗嗦 直接上代码…… private void button1_Click(object sender, EventArgs e) { //1.0创建EF上下文容器 ...
- A problem is easy
描述When Teddy was a child , he was always thinking about some simple math problems ,such as “What it’ ...