我有網址我想檢查它是否存在。我想獲得bool價值。如何做這樣的事情?Adobe Air如何檢查URL是否在線給出任何響應存在?
2
A
回答
3
您可以使用URLLoader並偵聽事件以檢查它是否加載,如果不是,可能是什麼問題。如果首先使用AIRMonitor來確保客戶端計算機處於聯機狀態,將會非常方便。
這是一類我開始寫來說明這個想法:
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.HTTPStatusEvent;
import flash.events.IEventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
/**
* ...
* @author George Profenza
*/
public class URLChecker extends EventDispatcher
{
private var _url:String;
private var _request:URLRequest;
private var _loader:URLLoader;
private var _isLive:Boolean;
private var _liveStatuses:Array;
private var _completeEvent:Event;
private var _dispatched:Boolean;
private var _log:String = '';
public function URLChecker(target:IEventDispatcher = null)
{
super(target);
init();
}
private function init():void
{
_loader = new URLLoader();
_loader.addEventListener(Event.COMPLETE, _completeHandler);
_loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, _httpStatusHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorEventHandler);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _securityErrorHandler);
_completeEvent = new Event(Event.COMPLETE, false, true);
_liveStatuses = [];//add other acceptable http statuses here
}
public function check(url:String = 'http://stackoverflow.com'):void {
_dispatched = false;
_url = url;
_request = new URLRequest(url);
_loader.load(_request);
_log += 'load for ' + _url + ' started : ' + new Date() + '\n';
}
private function _completeHandler(e:Event):void
{
_log += e.toString() + ' at ' + new Date();
_isLive = true;
if (!_dispatched) {
dispatchEvent(_completeEvent);
_dispatched = true;
}
}
private function _httpStatusHandler(e:HTTPStatusEvent):void
{
/* comment this in when you're sure what statuses you're after
var statusesLen:int = _liveStatuses.length;
for (var i:int = statusesLen; i > 0; i--) {
if (e.status == _liveStatuses[i]) {
_isLive = true;
dispatchEvent(_completeEvent);
}
}
*/
//200 range
_log += e.toString() + ' at ' + new Date();
if (e.status >= 200 && e.status < 300) _isLive = true;
else _isLive = false;
if (!_dispatched) {
dispatchEvent(_completeEvent);
_dispatched = true;
}
}
private function _ioErrorEventHandler(e:IOErrorEvent):void
{
_log += e.toString() + ' at ' + new Date();
_isLive = false;
if (!_dispatched) {
dispatchEvent(_completeEvent);
_dispatched = true;
}
}
private function _securityErrorHandler(e:SecurityErrorEvent):void
{
_log += e.toString() + ' at ' + new Date();
_isLive = false;
if (!_dispatched) {
dispatchEvent(_completeEvent);
_dispatched = true;
}
}
public function get isLive():Boolean { return _isLive; }
public function get log():String { return _log; }
}
}
,這裏是一個基本的使用示例:
var urlChecker:URLChecker = new URLChecker();
urlChecker.addEventListener(Event.COMPLETE, urlChecked);
urlChecker.check('wrong_place.url');
function urlChecked(event:Event):void {
trace('is Live: ' + event.target.isLive);
trace('log: ' + event.target.log);
}
的想法很簡單: 1.創建一個檢查 2.監聽COMPLETE事件(當結果爲 時觸發)3.在處理程序中檢查它是否存在並記錄它。
在HTTP specs中,200面積看起來不錯,但取決於您加載的內容,您可能需要 來調整類。此外,您還需要更好地處理安全/跨域問題,但至少這是一個開始。
HTH
3
一個重要的考慮是喬治的回答冷落是URLRequestMethod。如果有人試圖驗證相當大的文件(例如媒體文件)的存在,而不僅僅是網頁,那麼您需要確保將的method屬性設置爲URLRequestMethod.HEAD。
如HTTP1.1 Protocol指出:
HEAD方法是相同,除了在應答服務器不能返回一個消息體得到的。
因此,如果你真的只想驗證URL的存在,這是要走的路。
對於那些誰需要的代碼闡明:
var _request:URLRequest = URLRequest(url);
_request.method = URLRequestMethod.HEAD; // bandwidth :)
否則,喬治的回答是一個很好的參考點。
注:這個特殊的URLRequestMethod
只適用於AIR。
相關問題
- 1. Adobe Air如何檢查文件夾是否存在?
- 2. Adobe Air。檢查createDirectory()是否完成
- 3. Adobe Air Application的任何框架?
- 4. Adobe Air - 內存問題
- 5. Adobe AIR,內存泄漏
- 6. Adobe Air - Analytics
- 7. Adobe Air Browser
- 8. localToGlobal Adobe AIR
- 9. Adobe AIR readLine
- 10. Adobe Air是否支持RTMFP?
- 11. Adobe Air應用程序
- 12. 檢查url是否存在,但沒有檢查HTTP響應
- 13. 如何檢查URL是否存在?
- 14. 如何檢查url中是否存在任何php參數
- 15. Adobe Air和PHP
- 16. Adobe Air - window.nativeWindow undefined
- 17. Adobe Air的DeviceOrientationEvent
- 18. Adobe Air和.NET
- 19. Adobe AIR截圖
- 20. Adobe Air with Iphone
- 21. Adobe Air和Dropbox
- 22. Adobe Air for iPhone
- 23. Adobe air http auth
- 24. Adobe Air Javascript API
- 25. Adobe AIR&PHP + MySQL
- 26. Adobe AIR鎖定
- 27. 在App中購買ANE for Adobe air的任何成功?
- 28. Adobe AIR檢測ADL中是否運行?
- 29. Adobe AIR是否將Flash文件導出到手機中?
- 30. 如何檢查路線「URL」是否存在?
是否有任何其他檢查方式是否有任何文件使用本地磁盤給定的地址。我的意思是,我沒有使用AIR,並想檢查一個「xml」文件,該文件應該與主swf位於同一個文件夾中...並且我不想採用ioerror,只是想使用嵌入式xml而不是具有簡單條件的外部xml。我只想檢查外部xml是否存在並使用它,否則使用嵌入的xml。 – 2014-03-12 12:35:31
@AlobarNon,它聽起來像是在問一個完整的問題(不適合發表評論),而不是單純的澄清(適合評論)。我唯一的答案就是管理檢查非常大的文件,而不會無意下載它們。如果你正在處理XML,那可能不是這種情況。在這些答案中,觸發** IOError ** *是*你如何異步測試一個url。把它看作是你正在處理的另一個事件。但是,我幾年之後還沒有開發ActionScript,所以事情可能已經發生了變化。 – merv 2014-03-15 17:12:56
不,我已經完成了你所說的,異步使用IOErrorEvent檢查,這已經解決了我的問題,非常感謝:) – 2014-03-17 08:08:36