Changeset 478

Show
Ignore:
Timestamp:
08/11/08 04:17:29 (5 months ago)
Author:
heyadayo
Message:

cross sub-domain working in FF

Location:
trunk/daemon/orbited/static
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/daemon/orbited/static/Orbited.js

    r477 r478  
    341341    self.open = function(_url) { 
    342342        self.readyState = self.READY_STATE_OPENING; 
    343         xhr = createXHR(); 
     343        var url = new Orbited.URL(_url) 
     344        if (url.isSameDomain(location.href)) { 
     345            xhr = createXHR(); 
     346        } 
     347        else { 
     348            xhr = new Orbited.XSDR(); 
     349        } 
     350//        xhr = createXHR(); 
    344351        xhr.open('GET', _url, true); 
    345352        xhr.onreadystatechange = function() { 
     
    539546        var numSent = sendQueue.length 
    540547        sessionUrl.setQsParameter('ack', lastPacketId) 
    541         xhr = createXHR(); 
     548//        xhr = createXHR(); 
    542549        xhr.onreadystatechange = function() { 
    543550;;;         self.logger.debug('send readyState', xhr.readyState) 
     
    752759    id: 0, 
    753760    register: function(receive, queue) { 
    754         var id = ++Orbited.singleton.XSDR; 
     761        var id = ++Orbited.singleton.XSDR.id; 
    755762        Orbited.singleton.XSDR.receiveCbs[id] = receive; 
    756763        Orbited.singleton.XSDR.queues[id] = queue; 
     764;;;     Orbited.system.debug('id is', id) 
     765        return id; 
    757766    } 
    758767} 
    759  
    760768Orbited.XSDR = function() { 
    761769    var self = this; 
     
    771779        queue 
    772780    ) 
    773     var bridgeUrl = new URL("") 
    774     bridgeUrl.domain = Orbited.hostname 
    775     bridgeUrl.port = Orbited.port 
     781    var bridgeUrl = new Orbited.URL("") 
     782    bridgeUrl.domain = Orbited.settings.hostname 
     783    bridgeUrl.port = Orbited.settings.port 
    776784    bridgeUrl.path = '/static/xsdrBridge.html' 
    777     bridgeUrl.hash = id; 
    778      
     785    bridgeUrl.hash = id.toString(); 
     786    bridgeUrl.protocol = Orbited.settings.protocol 
     787;;; self.logger.debug('bridgeUrl.hash is', bridgeUrl.hash); 
     788;;; self.logger.debug('bridgeUrl.path is', bridgeUrl.path); 
     789;;; self.logger.debug('bridgeUrl is', bridgeUrl.render()); 
    779790    var reset = function() { 
    780791        self.responseText = "" 
     
    788799    } 
    789800    reset(); 
    790  
     801    self.onreadystatechange = function() { } 
    791802    self.open = function(_method, _url, async) { 
    792803        if (self.readyState == 4) { 
     
    799810            throw new Error("Only Async XSDR supported") 
    800811        } 
     812;;;     self.logger.debug('open', _method, _url, async) 
    801813        self.readyState = 1; 
    802814        url = _url; 
     
    808820            throw new Error("Invalid readyState"); 
    809821        } 
     822;;;     self.logger.debug('send', data) 
    810823        if (!ifr) { 
     824;;;         self.logger.debug('creating iframe') 
    811825            ifr = document.createElement("iframe") 
    812826            hideIframe(ifr); 
    813827            ifr.src = bridgeUrl.render() 
     828;;;         self.logger.debug('set ifr.src to', ifr.src); 
    814829            document.body.appendChild(ifr); 
    815830        } 
     
    840855 
    841856    var receive = function(payload) { 
     857;;;     self.logger.debug('received', payload) 
    842858        switch(payload[0]) { 
    843             case 'initialize': 
    844                 push([method, url, data, requestHeaders]); 
     859            case 'initialized': 
     860                queue.push([method, url, data, requestHeaders]); 
     861;;;             self.logger.debug('queue is', queue) 
     862;;;             self.logger.debug('Orbited.singleton.XSDR.queues[id] is', Orbited.singleton.XSDR.queues[id]) 
    845863                break; 
    846864            case 'readystatechange': 
     
    870888} 
    871889Orbited.XSDR.prototype.logger = Orbited.getLogger("Orbited.XSDR"); 
    872  
     890Orbited.singleton.XSDRBridgeLogger = Orbited.getLogger('XSDRBridge'); 
    873891 
    874892/* Comet Transports! 
     
    916934            } 
    917935            else { 
    918                 xhr = new XSubdomainRequest(url.domain, url.port); 
     936                xhr = new Orbited.XSDR(); 
    919937            } 
    920938        } 
  • trunk/daemon/orbited/static/xsdrBridge.html

    r477 r478  
    2121}; 
    2222 
    23  
    2423function push(data) { 
    2524 
     
    3736    }         
    3837} 
    39 if (!isOpera) 
     38logger = null; 
     39function debug() { 
     40    document.domain = topDomain 
     41    logger.debug.apply(logger, arguments) 
     42    try { 
     43        document.domain = origDomain; 
     44    } 
     45    catch(e) { 
     46    } 
     47} 
     48if (!isOpera) { 
    4049    if (parts.length == 1) { 
    4150        try { 
    4251            document.domain = document.domain 
    43             parent.Orbited 
     52            logger = parent.Orbited.singleton.XSDRBridgeLogger 
    4453            topDomain = document.domain 
    4554        } 
     
    5160            document.domain = parts.slice(i).join(".") 
    5261            try { 
    53                 parent.Orbited 
     62                logger = parent.Orbited.singleton.XSDRBridgeLogger 
    5463                topDomain = document.domain 
    5564                break; 
     
    6069        } 
    6170    } 
    62 } 
    6371if (topDomain == null) 
    6472    throw new Error("Invalid document.domain for cross-frame communication") 
    65  
     73} 
    6674push(['initialized']) 
    67  
    6875try { 
    6976    document.domain = origDomain 
     
    7481 
    7582function getNext() { 
     83//    alert( 
    7684    document.domain = topDomain 
    7785    var queue = parent.Orbited.singleton.XSDR.queues[id] 
    78 //    alert('queue: ' + parent.JSON.stringify(queue)) 
     86//    alert('queue: ' + queue.length) 
    7987    var data = null 
    8088    if (queue.length > 0) 
     
    97105function checkAbort() { 
    98106    if (isOpera)     
    99  
     107        return 
     108} 
    100109 
    101110function doNextRequest() { 
    102     if (isOpera) 
    103         sendGetNext() 
    104     else 
     111//    if (isOpera) 
     112//        sendGetNext() 
     113//    else 
    105114        req = getNext(); 
    106  
    107115    if (req == null) { 
    108116        return setTimeout(doNextRequest, 10); 
    109117    } 
    110  
    111118    var smethod = req[0] 
    112119    var surl = req[1] 
     
    120127            readyState: xhr.readyState 
    121128        } 
    122         if (xhr.readyState == 3) { 
    123             try { 
    124                 var data = xhr.responseText.slice(responseIndex) 
    125                 responseIndex = xhr.responseText.length; 
    126                 payload['responseText'] = data; 
    127             } 
    128             catch(e) { 
    129 //                alert('status..?'); 
    130             } 
     129        try { 
     130            payload['status'] = xhr.status 
    131131        } 
     132        catch(e) {            
     133        } 
     134        try { 
     135            var data = xhr.responseText.slice(responseIndex) 
     136            responseIndex = xhr.responseText.length; 
     137            payload['responseText'] = data; 
     138        } 
     139        catch(e) { 
     140        } 
     141        push(["readystatechange", payload]) 
     142 
    132143        if (xhr.readyState == 4) { 
    133             payload['responseText'] = xhr.responseText.slice(responseIndex) 
    134             payload['status'] = xhr.status 
    135             push(["readystatechange", payload]) 
    136144            req = null; 
    137145            return doNextRequest(); 
    138146        } 
    139         push(["readystatechange", payload]) 
    140147    } 
    141 //    alert('xhr.open(' + smethod + ', ' + surl + ', true)'); 
    142 //    alert('document.domain: ' + document.domain); 
    143148    xhr.open(smethod, surl, true) 
    144149    for (key in sheaders) { 
     
    159164 
    160165 
    161 if (isOpera) 
    162 { 
     166if (isOpera) { 
    163167    // Message receiver handler (req. for Opera compatibility) 
    164168    document.addEventListener('message', function(e) {