2012-03-17 84 views
0

假設我有外部網址(不是來自我的網站),我想驗證它,以確保這個網址是從這些文件中的一個: - jpg,jpeg,gif,png也是一個正確的圖像文件(不是任何腳本文件或PHP)。此外,如果這是可能的: - 檢查圖像的網址是否正常工作。Javascript:驗證外部網址的圖像

@ jfriend00好的,所以這裏是我想要做的。我修改了html表單,當用戶提交它時,它會調用一個javascript函數來驗證url是否爲圖像。所以這是我的代碼。但它不起作用。請告訴我,我應該從這裏做什麼?

<script type="text/javascript"> 

function vrfyImgURL() { 
var x = document.forms["submitIMGurl"].elements["img_url"].value; 

if(x.match('^http://.*/(.*?).(jpe?g|gif|png)$')){ 

var imgsrc = x; 
var img = new Image(); 

img.onerror = function(){ 
alert("Can't Be Loaded"); 
return false; 
} 
img.onload = function(){ 
alert("Loaded Successfully"); 
return true; 
} 

img.src = imgsrc; 

}else{ 
    alert("It looks like the url that you had provided is not valid! Please only submit correct image file. We only support these extensions:- jpeg, jpg, gif, png."); 
return false; 
} 
} 
</script> 

<form action="http://www.example.com/current_page" enctype='multipart/form-data' method="post" onsubmit="return vrfyImgURL();" name="submitIMGurl"> 
<input type="text" value="http://" name="img_url" /> 
<input type="submit" value="Submit" /> 
</form> 
+0

你爲什麼問這個問你在這裏相同的問題:http://stackoverflow.com/questions/9714525/javascript-image-url-verify/9714891#9714891我曾回答過一次? – jfriend00 2012-03-17 22:31:08

+0

@ jfriend00,因爲該解決方案無法在Chrome中使用外部圖片網址 – 2012-03-17 22:58:22

+0

該解決方案並不關心圖片網址是否爲本地圖片。在我提供的答案中,圖片不受域名限制。如果它不適用於外部圖像,那麼你正在做其他的事情。我建議你在該討論中發佈更多信息,我們將在這裏解決它,因爲這不是一個新問題。在我的[jsFiddle](http://jsfiddle.net/jfriend00/qKtra/)中,它使用外部圖像。 – jfriend00 2012-03-17 23:05:12

回答

2

你在這個職位代碼不正確執行我給你在the previous post並不會爲一些原因,工作中的作用的。你不能從onload,onrorror處理程序返回true/false。這些是異步事件,並且您的vrfyImgURL函數已經返回。

你真的要使用我放在that previous post的代碼。有用。只要使用它。不要修改它。你傳遞一個回調函數,並且這個回調函數會被驗證檢查結果調用。您必須使用異步編程才能將此回調與結果一起調用。你不能像你正在嘗試的那樣使用直接的順序編程。這是你的修改我的代碼,使其停止工作。

你可以看到我以前在這裏工作的代碼:http://jsfiddle.net/jfriend00/qKtra/,在這個例子中,它處理來自各種域的圖像。它對圖像的域不敏感,並且<img>標籤不受域限制。

把它掛到您的表單提交,你可以這樣做:

<form action="http://www.example.com/current_page" enctype='multipart/form-data' method="post" onsubmit="return formSubmit();" name="submitIMGurl"> 
<input type="text" value="http://" name="img_url" /> 
<input type="submit" value="Submit" /> 
</form> 

<script type="text/javascript"> 

function formSubmit() { 
    var url = document.forms["submitIMGurl"].elements["img_url"].value; 
    if (!checkURL(url)) { 
     alert("It looks like the url that you had provided is not valid! Please only submit correct image file. We only support these extensions:- jpeg, jpg, gif, png."); 
     return(false); 
    } 
    testImage(url, function(testURL, result) { 
     if (result == "success") { 
      // you can submit the form now 
      document.forms["submitIMGurl"].submit(); 
     } else if (result == "error") { 
      alert("The image URL does not point to an image or the correct type of image."); 
     } else { 
      alert("The image URL was not reachable. Check that the URL is correct."); 
     } 

    }); 
    return(false); // can't submit the form yet, it will get sumbitted in the callback 
} 

function checkURL(url) { 
    return(url.match(/\.(jpeg|jpg|gif|png)$/) != null); 
} 


function testImage(url, callback, timeout) { 
    timeout = timeout || 5000; 
    var timedOut = false, timer; 
    var img = new Image(); 
    img.onerror = img.onabort = function() { 
     if (!timedOut) { 
      clearTimeout(timer); 
      callback(url, "error"); 
     } 
    }; 
    img.onload = function() { 
     if (!timedOut) { 
      clearTimeout(timer); 
      callback(url, "success"); 
     } 
    }; 
    img.src = url; 
    timer = setTimeout(function() { 
     timedOut = true; 
     callback(url, "timeout"); 
    }, timeout); 
} 

</script> 

如果這是我的界面,我將禁用的形式貼了一張紙條,上面這張圖片的網址正在檢查開始時, testImage被調用並在調用回調時結束。

+0

但我該如何使用您的代碼來驗證用戶使用表單提交的網址。我的意思是如何在onsubmit =「」 – 2012-03-18 00:02:32

+0

上實現你的代碼我爲你的表單添加了一個實現。 – jfriend00 2012-03-18 00:17:51

+0

太棒了。它的工作原理,但只需要在onsubmit =「」之前添加「返回」功能。非常感謝你。 – 2012-03-18 00:34:16