кроссдоменный обмен через анонимайзер + фрейм
Поскольку для проектов на коленках или оказания безвозмездной помощи душит жаба по написанию и использованию собственного прокси (требует денег и времени), - есть идея замены прокси существующими анонимайзерами.
================================================== ===================================== Идея позволяет: читать-писать контент и 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, - идея выложена как есть для свободной реализации. |
хм... а что postMessage/XMLHttpRequest2/XDomainRequest отменили?
просто не понимаю зачем это, и где это использовать, в каких случаях. |
devote,
Цитата:
=========================================== 2. Cложнокоммутируемый обмен на клиенте между несколькими фреймами с произвольными сайтами. Данные сайты могут не иметь никакой специальной поддержки для организации обмена. - *пункт ЗЫ:(после пункта 5) ================================================== =============== Цитата:
|
понятно, ну будет время покумекаем... Если вникну в суть)
|
:) Захабрился => http://habrahabr.ru/post/165457/#first_unread
|
Прикидываю какие хотелось бы реализовать функции в 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, время: 06:01. |