Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.01.2013, 19:33
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

кроссдоменный обмен через анонимайзер + фрейм
Поскольку для проектов на коленках или оказания безвозмездной помощи душит жаба по написанию и использованию собственного прокси (требует денег и времени), - есть идея замены прокси существующими анонимайзерами.


================================================== =====================================
Идея позволяет: читать-писать контент и message на выбранном сайте,
производить авторизацию, ставить и исполнять скрипты.
================================================== =====================================



================================================== =====================================
Соль идеи такова:.
Все документы, подключенные через анонимайзер, - работают на одном домене..
Кроссдоменный обмен осуществляется с помощью фрейма frame1 с переключаемыми вкладками ("jumping tabs in frame"),
в котором находятся два документа-копии с текущего top.document, один из которых с тем же адресом, что и top.document, второй расположен на домене с анонимайзером.
Вкладки с документами обмениваются меж собой через window.name. В итоге, через данный фрейм осуществляется взаимодействия документов на домене с анонимайзером и документов на домене с top.document.


Начальная установка:

1. Скрипт для установки обмена один, первично расположен на главном документе, состоит из трех частей, работающих в соответствующих 'document-N '.
Нужная часть срабатывает по анализу соответствующего ключа "key" в текущем адресе документа.
Прим. Для 'addr0', используемого во фрейм-адресах, при наличии у top.document первоначального хеш(#...), - хеш удаляем;

2. Первоначально скрипт ставит фрейм frame0 с адресом anonimaiser+addr0+"#"+"key"+addr1,
где:
addr0 - адрес текущей страницы без хеша;
key - ключ - признак, необходимый для подключения и работы нужной части скрипта к соответствующему документу.
addr1 - адрес запрашиваемой страницы;

3. Часть скрипта работающего во фрейме frame0 ставит внутри себя фреймы: frame2 и frame1,
frame2 - ставится первым.
frame1 - ставится с первичным адресом anonimaiser+addr0+"#"+"key2";

4. document-2 во фрейме frame1 переключается на document-3 с адресом addr0+"#"+"key3";

5. По onload document-3 - запускаем callback функцию на document-0 об окончании установки фреймов.
----------------------------
Зы: После окончания установки и запуска возможно добавлением новых адресов одновременной связи
простым добавлением во frame0 - "еще один фрейм - еще один адрес"
И возможность организовать на клиенте сложносочиненный коммутируемый обмен меж этими сайтами.
================================================== ======


Обмен данными:


1. Обмен между документами: document-3 и document-0 лучше производить через LocalStorage, - это позволит продолжить сессию "кроссдоменного-обмена" после -закрытия/открытия/смены вкладки top.document.

2. "Jumping tabs in frame": Для организации обмена, вкладки с document-2 и document-3 переключаются туда-сюда.
....Обмен данными между вкладками с разных доменов во frame1 производится через window.name

3. Обмен между document-2 и document-4 лучше производить через функцию родительского frame0 function preset.
Данная функция выполняет предустановки для окна document-4 по onload при динамической смене адреса addr1,
(к примеру использовал для установки во frame2 по onload собственных стилей и библиотек jQuery),
а так же выполняет функции ожидания связи при запросе с document-4 на document-2 при включенной текущей вкладке document-3.
=========================================

Дополнение1:
Для ускорения загрузки фреймов: (document-1,document-2,document-3), сам скрипт ставим как можно ближе к началу страницы.
При наличии в текущем адресе вышеперечисленных ключей (key, key2, key3) в конце скрипта выполняем:
document.write('<style>body{display:none}</style><plaintext>'),
чем обрезаем излишний контент страницы во фреймах.
=========================================

Дополнение2:
Распространенные анонимайзеры бывают трёх типов кодирования адресных ссылок:

anonimaiser+"?..."+addr;
anonimaiser+"?..."+base64(addr);
И с включением адреса в доменное имя третьего уровня(пример http://anonymizer.ru/)

Для данной реализации подойдут лишь первых два типа.
=========================================

Дополнение3:
Кроссбраузерное LocalStorage => localStorage для IE6-7
функция base64: Подскажите символьный паккер, лучше чем base64
Cписок анонимайзеров http://ci-razvedka.ru/Anonymizer-v-k...-Razvedke.html
================================================== =====================================


Поскольку нет опыта в создании плагинов на чистом JS, - идея выложена как есть
для свободной реализации.

Последний раз редактировалось Deff, 12.01.2013 в 23:23.
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2013, 13:24
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

хм... а что postMessage/XMLHttpRequest2/XDomainRequest отменили?

просто не понимаю зачем это, и где это использовать, в каких случаях.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2013, 13:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

devote,
Сообщение от devote
м... а что postMessage/XMLHttpRequest2/XDomainRequest отменили?
Устанавливаем соединения с ресурсами, без установленных на них скриптов и Access-Control-Allow-Origin. (к примеру можно искать картинки в гуглокартинках
===========================================
2. Cложнокоммутируемый обмен на клиенте между несколькими фреймами с произвольными сайтами.
Данные сайты могут не иметь никакой специальной поддержки для организации обмена. - *пункт ЗЫ:(после пункта 5)
================================================== ===============
Сообщение от devote
просто не понимаю зачем это, и где это использовать,
Цеплял яндекс облако к форумам без доступа к движку для загрузки файлов в мессагах топика

Последний раз редактировалось Deff, 10.01.2013 в 01:33.
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2013, 13:49
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

понятно, ну будет время покумекаем... Если вникну в суть)
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2013, 23:06
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Захабрился => http://habrahabr.ru/post/165457/#first_unread

Последний раз редактировалось Deff, 12.01.2013 в 23:47.
Ответить с цитированием
  #6 (permalink)  
Старый 13.01.2013, 23:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Прикидываю какие хотелось бы реализовать функции в API данной структуры

1. Получить данные из селектора(селектор) из frame2
2. Отправить данные из селектора(селектор) с document-0 в селектор(селектор) frame2
3. Преобразовать ссылки в тегах и скриптах(удалить кодирование анонимайзера) полученого контента с анонимайзера
4. Подгрузить/запустить скрипт в селектор(селектор) frame2
5. Принять данные по событию запроса из frame2 /(тут наверное обращение из frame2 к function preset, которая передаст их в document-3 и далее на document-0) /запрос может быть с просьбой ответа, ответ можно сопровождать событием, к примеру клик на элементе во frame0, либо передать прямо в указанную функцию во frame2
6. Передать данные по предыдущему запросу из frame2*(см п.4) с document-0 во frame2;
7. Отследить событие(из document-0) на document-4 во frame2;
=================

Для Обменов меж несколькими фреймами - сайтами(подобных frame2 во frame0.):

a) Установить фрейм с адресом (возвращает уникальное name='name' )
b) Удалить фрейм по name;
c) Добавить новый фрейм с адресом (подобный frame2) к предыдущим (возвращает уникальное name='name')
d) Текущий массив имён и адресов всех запущенных фреймов в frame0.

Последний раз редактировалось Deff, 19.01.2013 в 19:59.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен значений переменных через фреймы kodoo Events/DOM/Window 8 05.11.2012 00:04