commit f9f09231d563f7ffe6b3210c32abc28c1a62d014 Author: David Fifield david@bamsoftware.com Date: Sun Sep 4 14:18:54 2011 -0700
Do basic mobile browser User-Agent matching in should_disable. --- swfcat.as | 32 +++++++++++++++++++++++++++++++- 1 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/swfcat.as b/swfcat.as index 8742bce..26bf1da 100644 --- a/swfcat.as +++ b/swfcat.as @@ -3,6 +3,7 @@ package import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; + import flash.external.ExternalInterface; import flash.text.TextField; import flash.text.TextFormat; import flash.net.Socket; @@ -136,9 +137,38 @@ package
/* Are circumstances such that we should self-disable and not be a proxy? We take a best-effort guess as to whether this device runs on - a battery or the data transfer might be expensive. */ + a battery or the data transfer might be expensive. + + Matching mobile User-Agents is complex; but we only need to match + those devices that can also run a recent version of Adobe Flash, + which is a subset of this list: + https://secure.wikimedia.org/wikipedia/en/wiki/Adobe_Flash_Player#Mobile_ope... + + Other resources: + http://www.zytrax.com/tech/web/mobile_ids.html + http://googlewebmastercentral.blogspot.com/2011/03/mo-better-to-also-detect-... + http://search.cpan.org/~cmanley/Mobile-UserAgent-1.05/lib/Mobile/UserAgent.p... + */ private function should_disable():Boolean { + const UA_LIST:Array = [ + /\bmobile\b/i, + /\bandroid\b/i, + /\bopera mobi\b/i, + ]; + var ua:String; + + ua = ExternalInterface.call("window.navigator.userAgent.toString"); + + for (var i:uint = 0; i < UA_LIST.length; i++) { + var re:RegExp = UA_LIST[i]; + + if (ua.match(re)) { + puts("Disabling because User-Agent matched " + re + "."); + return true; + } + } + return false; }