我一直在制作一个使用某种外部调查的网页。我很想知道当使用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 :(得分: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安全限制不允许您获取外部页面的位置或内容。