zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/wangfuyou/p/5445591.html
Copyright © 2011-2022 走看看