window.open ..一种判断窗口是超时还是404的方法?

时间:2011-12-25 20:41:41

标签: javascript

我一直在制作一个使用某种外部调查的网页。我很想知道当使用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);

2 个答案:

答案 0 :(得分:1)

查看跨域ajax请求:

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

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

或者,让弹出窗口加载一个本地脚本(php等),它首先执行cUrl或其他远程检查...让它检查返回的标头,然后 - 如果一切都好 - 它会发送标头转发到远程站点。如果返回了错误代码,那么您可以在弹出窗口中加载一个本地html / js页面,该页面具有可以与开启窗口对话的脚本,让它知道它失败了。

答案 1 :(得分: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安全限制不允许您获取外部页面的位置或内容。