Кроссдоменный обмен: анонимайзер + фрейм

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

=======================================================================================



=======================================================================================
Суть идеи такова:
Все документы, подключенные через анонимайзер, — работают на одном домене.
Кроссдоменный обмен осуществляется с помощью фрейма frame1 с переключаемыми вкладками, в котором находятся два документа-копии с текущего 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, а так же выполняет функции синхронизации связи при запросе с document-4 на document-2 при включенной текущей вкладке document-3.
=========================================

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

Вопросы:
хм... а что postMessage/XMLHttpRequest2/XDomainRequest отменили?
просто не понимаю зачем это, и где это использовать, в каких случаях.
Ответ:
1. Устанавливаем соединения с ресурсами, без установленных на них скриптов и Access-Control-Allow-Origin. (к примеру можно искать картинки в гуглокартинках

2. Cложнокоммутируемый обмен на клиенте между несколькими фреймами с произвольными сайтами.
Данные сайты могут не иметь никакой специальной поддержки для организации обмена.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 10

    0
    Только window.name — слишком громоздкая техника, требуемая только для IE6-7 и для неё тоже требуются скрипты с 2 сторон фрейма — одна сторона отдаёт текст в name, другая сторона принимает. Этот приём, в document-2 и document-3 у Вас, требуют скриптов внутри страницы. А ниже читаем: «хм… а что postMessage/XMLHttpRequest2/XDomainRequest отменили?» — «Устанавливаем соединения с ресурсами, без установленных на них скриптов». (И где вообще коды в этой статье?)

    Так как всё идёт через анонимайзер, то нет вообще проблемы с тем, чтобы залезть в любой фрейм и установить там любой нужный скрипт. Или использовать прямой разбор DOM, или чтение JS — всё, что хотите. Зачем вообще кроссдоменные методы?

    Есть способ вообще обойтись без прокси и общаться кроссдоменно из произвольных фреймов, например, Google+-кнопок. Для этого в каждый домен внедряются юзерскрипты для обмена по postMessage и в них пишутся небольшие процедуры. Так, получаем неискажённые анонимайзерами страницы без необходимости подключать сторонние серверы.
      0
      spmb написал: window.name — слишком громоздкая техника,
      Предложите иное для обмена вкладок с разных доменов?(Есть возможжность для новых браузеров через history Api, но отнюдь не быстрее.
      spmb написал: Есть способ вообще обойтись без прокси и общаться кроссдоменно из произвольных фреймов, например, Google+-кнопок. Для этого в каждый домен внедряются юзерскрипты

      Cуть как раз в том чтобы скриптом сделать полную эмуляцию возможности собственного прокси и как раз не используем внедрения в каждый домен юзерскриптов" (наверно подразумевается заранее), — не ожидаем, а работаем с тем что есть.
        0
        > Предложите иное для обмена вкладок с разных доменов
        --Почему с разных, если анонимайзер делает всё с одного домена? Поэтому обращаемся напрямую через фрейм.

        onload = function(){ var win2 = $(#ид_фрейма).contentWindow;
        	var win2.myScript = function(){alert('Я из фрейма');}
        	win2.myScript();
        }
        

        (Точнее, с кроссбраузерными оговорками, как в www.w3schools.com/jsref/prop_frame_contentwindow.asp .)
        Вписали свою функцию и выполнили её, когда надо. Совершенно нет смысла и передавать что-то через атрибут name, когда можно напрямую, если только не готовить скрипты для кроссдоменного взаимодействия в IE6-7.

        > Cуть как раз в том чтобы скриптом сделать полную эмуляцию возможности собственного прокси
        --Тогда это зависит от начальной задачи. Я, например, подумал, что нужна эмуляция доступности всех доменов по CORS, иначе зачем нужно это window.name?
          0
          spmb написал: -Почему с разных, если анонимайзер делает всё с одного домена? Поэтому обращаемся напрямую через фрейм.

          Хм — Вы станете пользовацо сайтом, — коли будете засылать всех пользователей не со своего адреса, а с анонимайзер+адрес ?, Суть в том, что процесс для пользователя неявный, всё это в скрытом фрейме frame0 и итог транслируется на главный документ (addr0 (document0) — на нашем родном домене.

          Все ухищрения для переноса результата на домен document0.
            0
            Доступность организуется через
            Jumping tabs in frame: Для организации обмена, вкладки с document-2 и document-3 переключаются туда-сюда. Обмен данными между вкладками frame1 производится через window.name.
            Который связывает домены исходной родительской страницы с доменом анонимайзера.
            Во фрейме два документа с разных доменов связаны через window.name.
              0
              Поправил Oбмен данных, пункт 2. для ясности:
              ''Обмен данными между вкладками с разных доменов во frame1 производится через window.name.''
                0
                Я, например, подумал, что нужна эмуляция доступности всех доменов по CORS,

                Доступны, без эмуляции, — Собственно в статье всё вроде расписано: Есть доступ к любому домену.
                Есть исключения с противодействиями антифрейм-скриптов, но они легко обходятся использованием анонимайзеров с настраиваемой блокировкой скриптов: Во frame0, frame1, — ставим анонимайзер с установленным признаком 'без блокировки', в frame2 — с 'блокировкой', (подобное использовал для Drag-and-drop картинок c гуглокартинок.
                  0
                  Если необходимо получения полного контента документа с aдреса anonimaiser+addr1 вместе со скриптами можно использовать обычный XMLHttpRequest — запросы из frame0.
      0
      spmb написал: Так, получаем неискажённые анонимайзерами страницы без необходимости подключать сторонние серверы.
      При анонимайзерах с линейным кодированием ссылок код взятой страницы легко перепарсивается в исходный для данного сайта, хотя имхо обычный смысл работы прокси не взятие именно ссылочного контента, а авторизация и возможность отправлять/принимать и передавать информацию находясь на подгруженном сайте в атоматическом программном режиме.
        0
        К примеру подцепить к форуму сервис заливки файлов не поддерживающих API для всех пользователей,
        Сделать перетаскивания(пакетное) с гуголкартинок( по желаему запросу) прямо на сайт.

      Only users with full accounts can post comments. Log in, please.