2017-07-27 182 views
1

我有這段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響應是一個窗口對象。

任何想法如何在這種情況下檢測到錯誤並不追蹤?

回答

1

第一個想法有效的,如果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