2011-09-30 30 views
1

我想驗證一個外部URL是否有效/存在/使用JavaScript響應。例如,「www.google.com」應該返回true,「www.google123.com」應該返回false。使用javascript的URL驗證/連接

我想使用AJAX爲此目的測試:如果(xmlhttp.readyState == 4 & & xmlhttp.status == 200),但似乎這並沒有對遠程服務器(外部URL)工作。由於我的服務器使用代理,我計劃使用瀏覽器端腳本,以便它自動使用用戶的瀏覽器代理(如果存在)。 請告訴我我必須使用「AJAX跨域」嗎?如何實現這一點,因爲我只是想驗證一個網址。 除了使用AJAX以外的其他方法?

回答

0

我很確定這是不可能的。任何允許您在用戶上下文中調用另一個域上的隨機頁面的AJAX都會打開各種安全漏洞。您將不得不使用服務器端解決方案。

+0

正如我說我的服務器使用一個代理,所以當我在URL構造函數中創建指定代理的HttpURLConnection時,它工作正常,但對於https連接,我再次遇到問題。由於HttpsURLConnection con =(HttpsURLConnection)url.openConnection(); - 不起作用,僅適用於HttpURLConnection。 那麼,如何實現這個簡單的事情呢? – user972810

+0

http://stackoverflow.com/questions/1511674/how-do-a-send-an-https-request-through-a-proxy-in-java可能會有所幫助。它仍然聽起來不那麼直截了當。 – alnorth29

+0

我不認爲由URL的openConnection()返回的對象可以被類型轉換爲HttpsURLConnection;雖然它可以被鑄造成HttpURLConnection,但是HttpsURLConnection連接=(HttpsURLConnection)url.openConnection(); 此外,我更感興趣的瀏覽器端驗證,所以我不必去這些代理設置。 – user972810

0

避免跨域問題的常用方法是注入標籤。像圖片或腳本這樣的標籤可以從任何域加載它們的內容。你可以注入,比如說類型爲「text/x-unknown」的腳本標記或者其他的東西,然後監聽標籤加載事件。當加載事件觸發時,您可以再次從頁面中刪除腳本標記。

當然,如果你正在尋找的文件恰好是圖像,那麼你可以改爲new Image()。這樣,您不必通過注入標籤來污染頁面,因爲圖像在創建時會加載(可用於預加載圖像)。再次,等待圖像上的加載事件。

UPDATE

好吧,看來我過早下結論這裏。瀏覽器之間在如何支持這方面存在一些差異。以下是一個完整的示例,介紹如何使用腳本標記驗證IE9和最新版本的Firefox,Chrome和Safari中的URL。

它不適用於舊版本的IE(至少IE8),因爲顯然它們不提供腳本標籤的加載/錯誤事件。

如果腳本標記的contenttype不爲空或設置爲「text/javascript」,Firefox拒絕加載任何內容。這意味着使用這種方法檢查腳本文件可能有點危險。好像之前在我的測試中執行任何代碼腳本標記將被刪除,但我肯定不...

不管怎麼說,這裏是代碼:

<!doctype html> 
<html> 
<head> 
    <script> 
     function checkResource(url, callback) { 
      var tag = document.createElement('script'); 
      tag.src = url; 
      //tag.type = 'application/x-unknown'; 
      tag.async = true; 
      tag.onload = function (e) { 
       document.getElementsByTagName('head')[0].removeChild(tag); 
       callback(url, true); 
      } 
      tag.onerror = function (e) { 
       document.getElementsByTagName('head')[0].removeChild(tag); 
       callback(url, false); 
      } 
      document.getElementsByTagName('head')[0].appendChild(tag); 
     } 
    </script> 
</head> 
<body> 
    <h1>Testing something</h1> 
    <p>Here is some text. Something. Something else.</p> 
    <script> 
     checkResource("http://google.com", function (url, state) { alert(url + ' - ' + state) }); 
     checkResource("http://www.google.com/this-does-not-exists", function (url, state) { alert(url + ' - ' + state) }); 
     checkResource("www.asdaweltiukljlkjlkjlkjlwew.com/does-not-exists", function (url, state) { alert(url + ' - ' + state) }); 
    </script> 
</body> 
</html> 
+0

如何在不返回圖片時使用圖片標籤來測試網址有效性。例如,將不起作用,它也會一直轉到錯誤部分,對於有效的URL也是如此。 還有其他方法嗎? – user972810

+0

您無法使用圖片來測試不是圖片的網址,但我相信您可以使用腳本標記。只需將腳本標籤類型設置爲「text/plain」或其他東西,所以它不會嘗試將其處理爲javascript。在這種情況下,您必須將標記插入到頁面中,並將附加回調函數添加到它的onload事件中。如果資源存在,則回調將被調用。如果資源不存在,則可以調用onerror – AHM

+0

腳本「type」標籤的值爲「text/tcl」,「text/javascript」,「text/vbscript」。 現在, 不起作用。沒有警報。任何其他建議? – user972810