Нетривиальная задача на js

[Удален]
551

Данные:

есть 2 файла front.js и bg.js, поместить в 1 файл невозможно, архитектура такая.

bg.js - запускается и работает постоянно, в этом файле посредством js для примера, открываем соединение websocket

	
ws = websocket('ws://localhost:8080/'); // глабальная, доступная через window.ws
ws.onopen = function(){
$('#status').text('online');
};
ws.ondisconnect = function(){
console.log('disco');
};
ws.onmessage = function(e){
//тут получаем данные
};

ws.onclose = function(){
console.log('close');
}
ws.send('some data');

Все просто, открываем соединение типа websocket отправляем данные и ждем получения.

Далее есть файл front.js, в этом и начинаются проблемы, в любой момент я могу получить объект window файла bg.js в файле front.js

bgwindow = get_background_window();

и легко могу послать некоторые данные через соедн., которые установлено в bg.js, но уже в файле front.js

сделав просто


bgwindow.ws.send('hello from front');

Все достаточно просто, но вот когда, нужно принять данные городим конструкции типа:



bgwindow.ws.onmessage = function(e){
//тут получаем данные
};

Этим действияем мы перезаписываем событие на файл front.js(объект window файла front.js) и как можно огадаться прием данных в файле bg.js уже невозможен, ну и это решаемо :


delete bgwindow.ws

Ну все эти решения кажутся костыльными, есть предложения как это все сделать лучше ?

IL
На сайте с 20.04.2007
Offline
435
#1
neotach:
и как можно огадаться прием данных в файле bg.js уже невозможен,

А что мешает сохранить старый обработчик?

Можно использовать addEventListener / attachEvent (там с кроссбраузерностью повнимательнее)

p.s. JS-фреймворки в проекте вообще не используются? в jQuery, например, события не заменяются (если, конечно, специально не "разбиндить")

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий