我有网址我想检查它是否存在。我想获得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 Browser
- 6. Adobe AIR readLine
- 7. Adobe Air是否支持RTMFP?
- 8. Adobe Air应用程序
- 9. 检查url是否存在,但没有检查HTTP响应
- 10. 如何检查url中是否存在任何php参数
- 11. Adobe Air和.NET
- 12. Adobe Air的DeviceOrientationEvent
- 13. Adobe air http auth
- 14. Adobe AIR锁定
- 15. Adobe Air Javascript API
- 16. Adobe Air - window.nativeWindow undefined
- 17. Adobe Air和PHP
- 18. Adobe Air for iPhone
- 19. Adobe AIR&PHP + MySQL
- 20. Adobe Air with Iphone
- 21. Adobe AIR检测ADL中是否运行?
- 22. 如何检查路线“URL”是否存在?
- 23. Adobe Air - 检测JavaScript事件
- 24. Adobe AIR:检测en_GB语言环境
- 25. Adobe AIR的桌面应用程序悬了(没有响应)
- 26. 检查URL是否存在
- 27. Adobe AIR安装位于何处?
- 28. Adobe AIR应用程序和蓝牙
- 29. Adobe AIR应用程序完整性
- 30. Adobe Air全球应用数据
是否有任何其他检查方式是否有任何文件使用本地磁盘给定的地址。我的意思是,我没有使用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