2011-12-25 111 views
5

我一直在做一个网页,使用一种...外部调查服用。我想知道,如果使用window.open方法,你能告诉你的新窗口是否有404或页面超时尝试加载?window.open ..判断窗口是否超时或404的方法?

这是我到目前为止有:

child = window.open(href, 'window'); 
     setTimeout(function() { 
      // Do some backend processing if child window is still open and no 404/timeout 
     }, 10000); 
+0

是同一个域中的弹出式窗口,你有超过其内容的控制? – sled 2011-12-25 20:51:08

+0

不,新的窗口将是一个外部URL,并在内容没有控制权 – Wilson212 2011-12-25 20:51:58

回答

1

这是一件很难做的事情。你必须处理安全问题(在JS中禁止跨域访问)。但我认为这个功能可以做的伎俩:

child = window.open(href, 'window'); 
     setTimeout(function() { 
      try { 
       var foo = child.location; 
      } 
      catch (err) { 
       // It has loaded. Manage that. 
       return; 
      } 
      // Still loading. Code here. 
      } 
     }, 10000); 

解释:尝试访问的子窗口的location元素。如果窗口已加载,试图访问它会抛出一个异常(跨域访问JS禁止),以便您管理。但是,如果您可以访问可能意味着它仍在加载的位置。

的主要问题是,有了这个代码,你只能当它加载或无法分辨,所以我想你可以只检查超时。我认为,检查404错误几乎是不可能的,因为JS的安全限制不允许你得到一个外部页面的位置或内容。

1

看一看跨域Ajax请求:

http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

有你可以把它取决于如何使用的几种方法远程站点是结构化的,但至少可以在启动弹出窗口之前检查页面是否存在(尽管这不能保证它会在弹出窗口中加载)。

或者,弹出加载一个本地脚本(PHP等),它首先做一个cUrl或其他远程检查......让它检查返回的头文件,然后 - 如果一切都很好 - 它会发送头文件以转发到远程站点。如果返回一个错误代码,那么你有弹出窗口加载一个本地的html/js页面,该页面有一个脚本,可以告诉opener窗口告诉它它失败了。

相关问题