github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

hotchpotch / as3rails2u

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 11
    • 1
  • Source
  • Commits
  • Network (1)
  • Issues (0)
  • Downloads (0)
  • Wiki (1)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Switch Branches (1)
    • master ✓
  • Switch Tags (0)
  • Branch List
Sending Request…

my as3 library — Read more

  Cancel

http://rails2u.com/

  Cancel
  • Private
  • Read-Only
  • HTTP Read-Only

This URL has Read+Write access

remove old documents 
Yuichi Tateno (author)
Mon Apr 28 01:56:27 -0700 2008
commit  113c00677c1c1807e1f40060a4a49e8681a2831d
tree    73d503f8d58c87977e5cae8f55011d725559311a
parent  48ca2157ca4a4adf7b225c00eb654b5950436a8a
as3rails2u / src / com / rails2u / net / JSONPLoader.as src/com/rails2u/net/JSONPLoader.as
100644 135 lines (116 sloc) 5.612 kb
edit raw blame history
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.rails2u.net {
    import flash.events.EventDispatcher;
    import flash.external.ExternalInterface;
    import flash.events.Event;
    import flash.errors.IllegalOperationError;
    import flash.events.TimerEvent;
    import flash.events.IOErrorEvent;
    import flash.utils.Timer;
    import flash.system.Security;
 
    /**
* How to use:
* // JSONPLoader.allowCurrentDomain(); // Allow show browsing url's domain.
* var loader:JSONPLoader = new JSONPLoader();
* loader.addEventListener(Event.COMPLETE, function(e:Event):void {
* log(e.target.data);
* });
* loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void {
* log('error!');
* });
* // loader.callbackQueryName = 'callback'; // Default name is "callback"
* loader.load('http://del.icio.us/feeds/json/url/data?hash=46efc577b7ddef30d1c6fd13311b371e');
*/
 
    public class JSONPLoader extends EventDispatcher {
        public var encoding:String = 'UTF-8';
        public var callbackQueryName:String = 'callback';
        public var data:Object;
        public var timeout:Number = 30;
        protected var nowCallbackFuncName:String;
 
        public static var callbackObjects:Object = {};
        public static var inited:Boolean = false;
 
        public function JSONPLoader(url:String = undefined):void {
            if (!ExternalInterface.available) throw (new IllegalOperationError('ExternalInterface.available should be true.'));
            if (!inited) init();
            if (url) load(url);
        }
 
        public static function allowCurrentDomain():void {
            var domain:String = execExternalInterface('return location.host.split(":", 2)[0]');
            Security.allowDomain(domain);
        }
 
        protected static function init():void {
            inited = true;
            ExternalInterface.addCallback('jsonpCallbacks', jsonpCallbacks);
 
        }
 
        public function load(url:String):void {
            if (observeTimer) {
                jsRemoveCallback(nowCallbackFuncName);
                clearObserveTimer();
            }
            var callbackFuncName:String = '_' + (new Date()).getTime().toString();
            nowCallbackFuncName = callbackFuncName;
            jsAddCallback(callbackFuncName);
 
            var loadURL:String = url + ((url.indexOf('?') > 0) ? '&' : '?') +
                    encodeURIComponent(callbackQueryName) + '=' + encodeURIComponent('as3callbacks.' + callbackFuncName);
            callbackObjects[callbackFuncName] = this;
            observeTimeout(timeout, callbackFuncName);
            createScriptElement(loadURL);
        }
 
        protected function createScriptElement(loadURL:String):void {
            var js:Array = [];
            js.push("var script = document.createElement('script');");
            js.push("script.charset = '" + encoding + "';");
            js.push("script.src = '" + loadURL + "';");
            js.push("setTimeout(function(){document.body.appendChild(script);}, 10);");
            dispatchEvent(new Event(Event.OPEN));
            execExternalInterface(js.join("\n"));
        }
 
        protected static function jsonpCallbacks(callbackFuncName:String, obj:Object):void {
            var target:JSONPLoader = callbackObjects[callbackFuncName] as JSONPLoader;
            if (target) {
                target.data = obj;
                target.dispatchEvent(new Event(Event.COMPLETE));
                target.clearObserveTimer();
            } else {
                new Error("Don't found callback(" + callbackFuncName + ").");
            }
        }
 
        protected static function execExternalInterface(cmd:String):* {
            cmd = "(function() {" + cmd + ";})";
            return ExternalInterface.call(cmd);
        }
 
        protected function jsAddCallback(callbackFuncName:String):void {
            var js:String = 'if (!window.as3callbacks) window.as3callbacks = {};window.as3callbacks["' + callbackFuncName +
                '"] = function(obj) { document.getElementsByName("' +
                ExternalInterface.objectID + '")[0].jsonpCallbacks("' + callbackFuncName + '",obj) };';
            execExternalInterface(js);
        }
 
        protected function jsRemoveCallback(callbackFuncName:String):void {
            var js:String = 'if (window.as3callbacks) window.as3callbacks["' + callbackFuncName + '"] = function() {};';
            execExternalInterface(js);
        }
 
        protected var observeTimer:Timer;
        protected function observeTimeout(sec:Number, callbackFuncName:String):void
        {
            observeTimer = new Timer(sec * 1000, 1);
            observeTimer.addEventListener(TimerEvent.TIMER, timeoutErrorHandlerBind(callbackFuncName), false, 1, true);
            observeTimer.start();
        }
 
        protected function timeoutErrorHandlerBind(callbackFuncName:String):Function {
            return function(e:TimerEvent):void {
                jsRemoveCallback(callbackFuncName);
                timeoutErrorHandler(e);
            }
        }
 
        protected function timeoutErrorHandler(e:TimerEvent):void
        {
            dispatchEvent(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, 'Request timeout'));
            clearObserveTimer();
        }
 
        // FIXME: Public namespace should be protected.
        public function clearObserveTimer():void {
            observeTimer.removeEventListener(TimerEvent.TIMER, timeoutErrorHandler);
            observeTimer.stop();
            observeTimer = null;
        }
    }
}
 
Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server