此网站无法访问(ERR_CONNECTION_CLOSED)window.open的javascript检测

问题描述:

我有这段JavaScript代码做我的clickouts,它应该启用正确的点击跟踪。 clickDestinations都是不同的,并且有很多(跨域)。此网站无法访问(ERR_CONNECTION_CLOSED)window.open的javascript检测

var response = window.open(clickDestination, randomName); 
if (typeof response.focus === 'function') { 
     alert('tracking this click-out'); 
} 

问题这个实现是clickDestination是由用户给出它的一些很老了,所以不能保证HTTP或HTTPS协议的设置是否正确。

当用错误的协议调用window.open时,在https不支持https的网站上,我收到“此站点无法访问”页面(ERR_CONNECTION_CLOSED)。但我的跟踪器无论如何追踪,因为var响应是一个窗口对象。

任何想法如何在这种情况下检测到错误并不追踪?

第一个想法有效的,如果URL是在同一个域(同源策略适用于这里):

var w = window.open(url); 

// if window opened successfully 
if (w) { 
    w.onload = function() { 
     alert('tracking this click-out'); 
    }; 
} 

设想二:

window.open返回到新创建的窗口的引用。 如果通话失败,则会改为nullRef

所以,如果因为在指定的网址,服务器不支持HTTPS或者是http null将被退回,所以你可以使用这些信息来跳过跟踪代码连接失败。

例(未测试):

var response = window.open(clickDestination, randomName); 
// if destination cannot be open, skip tracking code 
if(!response){ 
    return; 
} 
if (typeof response.focus === 'function') { 
     alert('tracking this click-out'); 
} 
+0

不幸的是,它仍然是一个窗口对象,我得到一个新的标签,上面写着“这个网站无法到达”,例如在Chrome。感谢您的时间。 – Mccandless5

+0

@ Mccandless5我添加了另一个想法。我希望可以有用。 – GibboK

+0

这个答案解释了在这种情况下可以完成的一切。 – Mccandless5