Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   кроссдоменный обмен через анонимайзер + фрейм (https://javascript.ru/forum/project/34378-krossdomennyjj-obmen-cherez-anonimajjzer-frejjm.html)

Deff 01.01.2013 19:33

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


================================================== =====================================
Идея позволяет: читать-писать контент и 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 => http://javascript.ru/forum/project/2...a-ie6-7-a.html
функция base64: http://javascript.ru/forum/185226-post20.html
Cписок анонимайзеров http://ci-razvedka.ru/Anonymizer-v-k...-Razvedke.html
================================================== =====================================


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

devote 08.01.2013 13:24

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

просто не понимаю зачем это, и где это использовать, в каких случаях.

Deff 08.01.2013 13:27

devote,
Цитата:

Сообщение от devote
м... а что postMessage/XMLHttpRequest2/XDomainRequest отменили?

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

Сообщение от devote
просто не понимаю зачем это, и где это использовать,

Цеплял яндекс облако к форумам без доступа к движку для загрузки файлов в мессагах топика

devote 08.01.2013 13:49

понятно, ну будет время покумекаем... Если вникну в суть)

Deff 12.01.2013 23:06

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

Deff 13.01.2013 23:24

Прикидываю какие хотелось бы реализовать функции в 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.


Часовой пояс GMT +3, время: 16:33.