mirror of
https://github.com/Mibew/java.git
synced 2025-01-22 17:40:35 +03:00
Added Cross-domain javascript requests
This commit is contained in:
parent
777b640f8e
commit
04a096fea1
8
src/messenger/webim/js/request.js
Normal file
8
src/messenger/webim/js/request.js
Normal file
@ -0,0 +1,8 @@
|
||||
var mibewRequestedScripts=[],mibewHandlers=[],mibewHandlersDependences=[];
|
||||
function mibewMakeRequest(){mibewDoLoadScript(mibewRequestUrl+"&rnd="+Math.random(),"responseScript")}
|
||||
function mibewOnResponse(a){var b=a.load,c=a.handlers,e=a.data,a=a.dependences;for(id in b)if(!(b[id]in mibewRequestedScripts))mibewRequestedScripts[id]=[],mibewRequestedScripts[id].url=b[id],mibewRequestedScripts[id].status="loading",mibewLoadScript(id);for(handler in a)handler in mibewHandlersDependences||(mibewHandlersDependences[handler]=a[handler]);for(b=0;b<c.length;b++){var d=c[b];if(mibewCanRunHandler(c[b]))window[d](e);else c[b]in mibewHandlers||(mibewHandlers[d]=function(){window[d](e)})}mibewCleanUpAfterRequest(); window.setTimeout(mibewMakeRequest,mibewRequestTimeout)}
|
||||
function mibewCleanUpAfterRequest(){document.getElementsByTagName("head")[0].removeChild(document.getElementById("responseScript"))}
|
||||
function mibewDoLoadScript(a,b){var c=document.createElement("script");c.setAttribute("type","text/javascript");c.setAttribute("src",a);c.setAttribute("id",b);document.getElementsByTagName("head")[0].appendChild(c);return c}
|
||||
function mibewLoadScript(a){var b=mibewDoLoadScript(mibewRequestedScripts[a].url,a);b.onload=function(){mibewScriptReady(a)};b.onreadystatechange=function(){("complete"==this.readyState||"loaded"==this.readyState)&&mibewScriptReady(a)}}
|
||||
function mibewScriptReady(a){mibewRequestedScripts[a].status="ready";for(handlerName in mibewHandlers)mibewCanRunHandler(handlerName)&&(mibewHandlers[handlerName](),delete mibewHandlers[handlerName])}
|
||||
function mibewCanRunHandler(a){for(var a=mibewHandlersDependences[a],b=0;b<a.length;b++)if("ready"!=mibewRequestedScripts[a[b]].status)return!1;return!0};
|
@ -41,6 +41,10 @@
|
||||
<arg value="invite:1"/>
|
||||
<arg value="--js"/>
|
||||
<arg value="invite.js"/>
|
||||
<arg value="--module"/>
|
||||
<arg value="request:1"/>
|
||||
<arg value="--js"/>
|
||||
<arg value="request.js"/>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
|
98
src/messenger/webim/js/source/request.js
Normal file
98
src/messenger/webim/js/source/request.js
Normal file
@ -0,0 +1,98 @@
|
||||
var mibewRequestedScripts = new Array();
|
||||
var mibewHandlers = new Array();
|
||||
var mibewHandlersDependences = new Array();
|
||||
|
||||
function mibewMakeRequest()
|
||||
{
|
||||
mibewDoLoadScript(mibewRequestUrl + '&rnd=' + Math.random(), 'responseScript');
|
||||
}
|
||||
|
||||
function mibewOnResponse(response)
|
||||
{
|
||||
var load = response.load;
|
||||
var handlers = response.handlers;
|
||||
var data = response.data;
|
||||
var dependences = response.dependences;
|
||||
|
||||
for(id in load){
|
||||
if(! (load[id] in mibewRequestedScripts)){
|
||||
mibewRequestedScripts[id] = new Array();
|
||||
mibewRequestedScripts[id]['url'] = load[id];
|
||||
mibewRequestedScripts[id]['status'] = 'loading';
|
||||
mibewLoadScript(id);
|
||||
}
|
||||
}
|
||||
|
||||
for(handler in dependences){
|
||||
if(! (handler in mibewHandlersDependences)){
|
||||
mibewHandlersDependences[handler] = dependences[handler];
|
||||
}
|
||||
}
|
||||
|
||||
for(var i = 0; i < handlers.length; i++){
|
||||
var handlerName = handlers[i];
|
||||
if(mibewCanRunHandler(handlers[i])){
|
||||
window[handlerName](data);
|
||||
}else{
|
||||
if(! (handlers[i] in mibewHandlers)){
|
||||
mibewHandlers[handlerName] = function(){
|
||||
window[handlerName](data);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mibewCleanUpAfterRequest();
|
||||
|
||||
window.setTimeout(mibewMakeRequest,mibewRequestTimeout);
|
||||
}
|
||||
|
||||
function mibewCleanUpAfterRequest()
|
||||
{
|
||||
document.getElementsByTagName('head')[0].removeChild(document.getElementById('responseScript'));
|
||||
}
|
||||
|
||||
function mibewDoLoadScript(url, id)
|
||||
{
|
||||
var script = document.createElement('script');
|
||||
script.setAttribute('type', 'text/javascript');
|
||||
script.setAttribute('src', url);
|
||||
script.setAttribute('id', id);
|
||||
document.getElementsByTagName('head')[0].appendChild(script);
|
||||
return script;
|
||||
}
|
||||
|
||||
function mibewLoadScript(id)
|
||||
{
|
||||
var script = mibewDoLoadScript(mibewRequestedScripts[id]['url'], id);
|
||||
script.onload = function(){
|
||||
mibewScriptReady(id);
|
||||
}
|
||||
script.onreadystatechange = function(){
|
||||
if (this.readyState == 'complete' || this.readyState == 'loaded') {
|
||||
mibewScriptReady(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mibewScriptReady(id)
|
||||
{
|
||||
mibewRequestedScripts[id]['status'] = 'ready';
|
||||
for(handlerName in mibewHandlers){
|
||||
if(mibewCanRunHandler(handlerName)){
|
||||
mibewHandlers[handlerName]();
|
||||
delete mibewHandlers[handlerName];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mibewCanRunHandler(handlerName)
|
||||
{
|
||||
var dependences = mibewHandlersDependences[handlerName];
|
||||
for(var i = 0; i < dependences.length; i++){
|
||||
if(mibewRequestedScripts[dependences[i]]['status'] != 'ready'){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
@ -465,6 +465,14 @@ function start_html_output()
|
||||
header("Content-type: text/html" . (isset($charset) ? "; charset=" . $charset : ""));
|
||||
}
|
||||
|
||||
function start_js_output(){
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Pragma: no-cache");
|
||||
header("Content-type: application/javascript; charset=utf-8");
|
||||
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
|
||||
}
|
||||
|
||||
function escape_with_cdata($text)
|
||||
{
|
||||
return "<![CDATA[" . str_replace("]]>", "]]>]]><![CDATA[", $text) . "]]>";
|
||||
|
31
src/messenger/webim/libs/request.php
Normal file
31
src/messenger/webim/libs/request.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of Mibew Messenger project.
|
||||
*
|
||||
* Copyright (c) 2005-2011 Mibew Messenger Community
|
||||
* All rights reserved. The contents of this file are subject to the terms of
|
||||
* the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||
* is available at http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of those above. If you wish
|
||||
* to allow use of your version of this file only under the terms of the GPL, and
|
||||
* not to allow others to use your version of this file under the terms of the
|
||||
* EPL, indicate your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
*
|
||||
* Contributors:
|
||||
* Dmitriy Simushev - Cross-domain javascript requests implementation
|
||||
*/
|
||||
|
||||
function build_js_response($response)
|
||||
{
|
||||
$result = array('load' => (isset($response['load'])?$response['load']:array()),
|
||||
'handlers' => (isset($response['handlers'])?$response['handlers']:array()),
|
||||
'dependences' => (isset($response['dependences'])?$response['dependences']:array()),
|
||||
'data' => (isset($response['data'])?$response['data']:array()));
|
||||
return "mibewOnResponse(" . json_encode($result) . ");";
|
||||
}
|
||||
|
||||
?>
|
30
src/messenger/webim/request.php
Normal file
30
src/messenger/webim/request.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of Mibew Messenger project.
|
||||
*
|
||||
* Copyright (c) 2005-2011 Mibew Messenger Community
|
||||
* All rights reserved. The contents of this file are subject to the terms of
|
||||
* the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||
* is available at http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||
* the provisions of the GPL are applicable instead of those above. If you wish
|
||||
* to allow use of your version of this file only under the terms of the GPL, and
|
||||
* not to allow others to use your version of this file under the terms of the
|
||||
* EPL, indicate your decision by deleting the provisions above and replace them
|
||||
* with the notice and other provisions required by the GPL.
|
||||
*
|
||||
* Contributors:
|
||||
* Dmitriy Simushev - Cross-domain javascript requests implementation
|
||||
*/
|
||||
|
||||
require_once('libs/request.php');
|
||||
|
||||
$response = array();
|
||||
|
||||
start_js_output();
|
||||
echo build_js_response($response);
|
||||
|
||||
exit;
|
||||
?>
|
Loading…
Reference in New Issue
Block a user