| <!-- |
| /* |
| Copyright (c) 2004-2008, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| --> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <title></title> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> |
| <!-- Security protection: uncomment the start and end script tags to enable. --> |
| <!-- script type="text/javascript" --> |
| // <!-- |
| |
| function pollHash(){ |
| //Can't use location.hash because at least Firefox does a decodeURIComponent on it. |
| var urlParts = window.location.href.split("#"); |
| if(urlParts.length == 2){ |
| var newHash = urlParts[1]; |
| if(newHash != xipCurrentHash){ |
| try{ |
| callMaster(xipStateId, newHash); |
| }catch(e){ |
| //Make sure to not keep processing the error hash value. |
| xipCurrentHash = newHash; |
| throw e; |
| } |
| xipCurrentHash = newHash; |
| } |
| } |
| } |
| |
| function unpackMessage(encodedMessage){ |
| var parts = encodedMessage.split(":"); |
| var command = parts[1]; |
| encodedMessage = parts[2] || ""; |
| |
| var config = null; |
| if(command == "init"){ |
| var configParts = encodedMessage.split("&"); |
| config = {}; |
| for(var i = 0; i < configParts.length; i++){ |
| var nameValue = configParts[i].split("="); |
| config[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]); |
| } |
| } |
| return {command: command, message: encodedMessage, config: config}; |
| } |
| |
| //************** Init ************************** |
| xipCurrentHash = ""; |
| |
| //Decode the init params |
| var fragId = window.location.href.split("#")[1]; |
| var config = unpackMessage(fragId).config; |
| |
| xipStateId = config.id; |
| xipMasterFrame = parent.parent; |
| |
| //Set up an HTML5 messaging publisher if postMessage exists. |
| //As of this writing, this is only useful to get Opera 9.25+ to work. |
| if(typeof document.postMessage != "undefined"){ |
| callMaster = function(stateId, message){ |
| xipMasterFrame.document.postMessage(stateId + "#" + message); |
| } |
| }else{ |
| var parts = config.callback.split("."); |
| xipCallbackObject = xipMasterFrame; |
| for(var i = 0; i < parts.length - 1; i++){ |
| xipCallbackObject = xipCallbackObject[parts[i]]; |
| } |
| xipCallback = parts[parts.length - 1]; |
| |
| callMaster = function(stateId, message){ |
| xipCallbackObject[xipCallback](stateId + "#" + message); |
| } |
| } |
| |
| //Call the master frame to let it know it is OK to start sending. |
| callMaster(xipStateId, "0:loaded"); |
| |
| //Start counter to inspect hash value. |
| setInterval(pollHash, 10); |
| |
| // --> |
| <!-- </script> --> |
| </head> |
| <body> |
| <h4>The Dojo Toolkit -- xip_client.html</h4> |
| |
| <p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the "client" file used |
| internally by dojox.io.proxy.xip.</p> |
| </body> |
| </html> |