Другие языки программирования и технологии

Программисты, для чего предназначен этот код?

(function(w) {
if (w.fastXDM) return;

var handlers = {};
var onEnvLoad = [];
var env = {};

// Key generation
function genKey() {
var key = '';
for (i=0;i<5;i++) key += Math.ceil(Math.random()*15).toString(16);
return key;
}
function waitFor(obj, prop, func, self, count) {
if (obj[prop]) {
func.apply(self);
} else {
count = count || 0;
if (count < 1000) setTimeout(function() {
waitFor(obj, prop, func, self, count + 1)
}, 0);
}
}
function attachScript(url) {
setTimeout(function() {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = url || w.fastXDM.helperUrl;
waitFor(document, 'body', function() {
document.getElementsByTagName('HEAD')[0].appendChild(newScript);
});
}, 0);
}

function walkVar(value, clean) {
switch (typeof value) {
case 'string':
if (clean) {
return value.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''');
}
return value.replace(/'/g, '\'').replace(/"/g, '"').replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&');

case 'object':
if (Object.prototype.toString.apply(value) === '[object Array]') {
newValue = [];
for (var i = 0; i < value.length; i++) {
newValue[i] = walkVar(value[i], clean);
}
} else {
for (var k in value) {
newValue = {};
if (Object.hasOwnProperty.call(value, k)) {
newValue[k] = walkVar(value[k], clean);
}
}
}
default:
newValue = value;
}

return newValue;
}

// Env functions
function getEnv(callback, self) {
if (env.loaded) {
callback.apply(self, [env]);
} else {
onEnvLoad.push([self, callback]);
}
}

function envLoaded() {
env.loaded = true;
var i = onEnvLoad.length;
while (i--) {
onEnvLoad[i][1].apply(onEnvLoad[i][0], [env]);
}
}

function applyMethod(strData, self) {
getEnv(function(env) {
var data = env.json.parse(strData);
if (data[0]) {
if (!data[1]) data[1] = [];
var i = data[1].length;
while (i--) {
if (data[1][i]._func) {
var funcNum = data[1][i]._func;
data[1][i] = function() {
var args = Array.prototype.slice.call(arguments);
args.unshift('_func'+funcNum);
self.callMethod.apply(self, args);
}
} else if (self.options.safe) {
data[1][i] = walkVar(data[1][i], true);
}
}
setTimeout(function() {
if (!self.methods[data[0]]) {
throw Error('fastXDM: Method ' + data[0] + ' is undefined');
}
self.methods[data[0]].apply(self, data[1]);
}, 0);
}
});
}

// XDM object
w.fastXDM = {
_id: 0,
helperUrl: ((location.protocol === 'https:') ? 'https:' : 'http:') + '//vk.com/js/api/xdmHelper.js',

Server: function(methods, filter, options) {
this.methods = methods || {};
this.id = w.fastXDM._id++;
this.options = options || {};
this.filter = filter;
this.key = genKey();
this.methods['%init%'] = this.methods.__fxdm_i = function() {
w.fastXDM.run(this.id);
if (this.methods.onInit) this.methods.onInit();
};
this.frameName = 'fXD'+this.key;
this.server = true;
handlers[this.key] = [applyMethod, this];
},

Client: function(methods, options) {
this.methods = methods || {};
this.id = w.fastXDM._id++;
this.options = options || {};
w.fastXDM.run(this.id);
if (window.name.indexOf('fXD') === 0) {
this.key = window.name.substr(3);
} else {
throw Error('Wrong window.name property.');
}
this.caller = window.parent;
handlers[this.key] = [applyMethod, this];
this.client = true;

w.fastXDM.on('helper', function() {
w.fastXDM.onClientStart(this);
}, this);

getEnv(function(env) {
env.send(this, env.json.stringify(['%init%']));
var methods = this.methods;
setTimeout(function() {
if (methods.onInit) methods.onInit();
}, 0);
}, this);
},

onMessage: function(e) {
if (!e.data) return false;
(удалил несколько символов из-за ограничения символов в майле)
чота с вк тырет
Ilgiz Satyvaldiev
Ilgiz Satyvaldiev
2 450
Лучший ответ
Ярослав Рыбченко Да, я этот код с ВК взял
Евгений Евгений да это связоно с вк
Слишком много кода, и он не отформатирован. Бесплатно с этим разбираться никто не станет.
Жанат Байтенов
Жанат Байтенов
89 371
Ярослав Рыбченко То есть не отформатирован?
хз не по русски написано!
Дичь какая-то в предыдущем посте. А по теме:
fastXDM - js библиотека (инструмент) необходимый для работы модулей VK. Нужен чтобы iframe мог "общаться" с сервисам VK кроссбраузерно и удобно.
Первая же ссылка в поиске))
Анонимный вопрос, через вк
функция (ж) {
если (Вт. fastM) возвращение;

вар обработчики = {};
вар onEnvLoad = [];
вар ОКР = {};

// Генерация ключей
генкей функция () {
вар ключ = ";
для (вар я = 0; я < 5; я++) {
ключ += Математика. метод ceil(Математика. случайный () * 15).метод tostring(16);
}
вернуть ключ;
}

инструкция waitfor функция (объект, реквизит, функ, собственной, граф) {
если (объект [реквизит]) {
функ. применить (самовыдвижение);
} еще {
количество = число || 0;
если (количество < 1000) {
функции settimeout(функция () {
инструкция waitfor(объект, реквизит, функ, собственной, граф + 1);
}, 0);
}
}
}

attachScript функции (URL-адрес) {
функции settimeout(функция () {
вар newScript = документ. метод createelement('скрипт');
newScript.Тип = 'текст/JavaScript';
newScript.в src = URL-адрес || Вт. fastM.helperUrl;
инструкция waitfor(документ, 'тело', функция () {
документ. метод getelementsbytagname('голова')[0].метода appendchild(newScript);
});
}, 0);
}

функция walkVar(стоимость) {
вар значениев;

переключатель (для вызова typeof значение) {
случае 'строка':
если (чистой) {
значение = значение. заменить (/&/г '&амп;').заменить (/</г, в '<').заменить (/>/г, в '>').заменить (/"/г, в '"').заменить (/'/г, ''');
} еще {
значение = значение. заменить (/'/г, '\").заменить (/" и/г, '"').заменить (/&ГТ; /г, '>').заменить (/&ЛТ; /г, '<').заменить (/&амп; /г, '&');
}
перерыв;
случае "объект":
если (объект. прототип. метод tostring.применение (значение) === '[объект Array]') {
значение = [];
для (вар я = 0, лен = значение. длина; я < длина; я++) {
значение [я] = walkVar(значение [я], чистому);
}
} еще {
значениев = {};
для (вар K в значение) {
если (объект. метод hasownproperty.вызов (значение к)) {
значение [к] = walkVar(значение [к], чистый);
}
}
}
перерыв;
по умолчанию:
значение = значение;
перерыв;
}

возврат значение;
}

Функций // ОКР
функции getenv(функции обратного вызова, самовыдвижение) {
если (ОКР. загружен) {
обратного вызова. применить (самовыдвижение, [ОКР]);
} еще {
onEnvLoad.толчок ([собственной личности, обратного вызова]);
}
}

envLoaded функция () {
ОКР. загружен = истина;

для (вар я = 0, лен = onEnvLoad.длина; я < длина; я++) {
onEnvLoad[я] [1].применить (onEnvLoad[я] [0], [ОКР]);
}
}

applyMethod функции (strData, самовыдвижение) {
функции getenv(функция (ОКР) {
Варе данных = ОКР. в json.разобрать (strData);
если (данные [0]) {
если (!данные [1]) данные [1] = [];

для (вар я = 0, лен = данные [1].длина; я < длина; я++) {
если (данные [1][я] && данных [1][я]. _func) {
вар funcNum = данные [1][я]. _func;
данных [1][я] = функция () {
вар параметр args = массив. прототип. срез. вызов (аргументы);
аргументы. unshift по ('_func' + funcNum);
самовывоз. callMethod.применить (собственной, аргументы);
}
} остальное, если (собственн. варианты. безопасный) {
данных [1][я] = walkVar(данные [1][я], истина);
}
}

функции settimeout(функция () {
если (!самовывоз. методы [данные [0]]) {
выдает ошибку ('fastM: данные способ' + [0] + 'неопределено');
}
самовывоз. методы [данные [0]].применить (самовыдвижение, данные [1]);
}, 0);
}
});
}

функции extend(obj1, obj2) {
для (вар я в obj2) {
если (obj1[я] && typeof на (obj1[я]) === 'объект') {
продлить (obj1[я], obj2[я])
} еще {
obj1[я] = obj2[я];
}
}
}
Ярослав Рыбченко Спасибо, долго писал?

Похожие вопросы