Pull to refresh

Comments 11

# » Usersctripts. Кроссдоменные запросы
ошибка в первом слове
Можно было в личку, но спасибо, исправил.
Нужно будет попробовать разобраться.
Я раньше делал проксирование при помощи сервера, делал запрос на свой сервер, а постом передавал куда (адрес другого сайта) и какие данные отправить. Быстро, удобно и практично, но дополнительный запрос к своему серверу, + проблема с передачей кукисов…
Это хорошо, когда у вас есть свой сервер, на котором можно поднять прокси.
Но тут есть жирный минус — безопасность. Передача данных на сторонний сервер — это бяка. Для пользователя это один из самых первых признаков того, что его хотят наебмануть.
Ещё один минус — дополнительная зависимость.

Скрипты в Хроме и Гризманки имеют свои чёткие механизмы запросов. Основная проблема — это IE и Opera.
Для Оперы решения с доп. файлом практически всегда достаточно. К тому же, дополнительный файл — это по сути «движок» для кроссдоменных запросов, который можно использовать из любых других юзерскриптов в Опере.

У меня не возникало проблем с тем, чтобы объяснить клиентам необходимость подкладывания дополнительного файла. По большей части потому, что плагины/расширения для запуска скриптов нужны для большинства браузеров и доп. скрипт воспринимается как очередной «плагин для Оперы».

> JSONP позволяет только GET-запросы

Есть вариант с iframe, туда можно вставить форму и отправить POST, единственно что бы прочитать ответ с чужого домена, нужно еще пару телодвижений — я обходился редиректом на favicon с GET, на свой домен. После этого браузер разрешает прочитать URL фрейма, и получить результат. На тот момент решение работало в IE, FF, Chrome, Opera — правда для оперы были небольшие особенности в реализации.
Естественно для ответа есть ограничения по длине, но ели запаковать еще JSON данные, то для обычных задач должно хватить. В крайнем случае спасут два запроса, iframe (шлем сколько хотим, читаем ограниченно по длине URL) и JSONP (шлем ограниченно, читаем сколько хотим).
Еще есть возможность делать кроссдоменные запросы с помощью Flash и crossdomain.xml. Единственное ограничение — наличие Flash Player на компьютере пользователя.
У меня была подобная задачка:
JS — окошко, которое подключалось через тэг script на любой сайт.
Надо было через JS догружать данные по клику.
У меня были сделаны страницы на сервере, которые отдавали данные в виде js.
Запрос делался как в этой статье для Оперы, только без установки события — t._callback.
Отлично все работает во всех браузерах.

Вот пример метода отправки запрсов, containerName — это div или другой html тэг, в который вставляется результат выполнения скрипта.

/* $$DoScriptRequest('content', 'http://test.page.ru/', { name: 'param', value: 'test' }, { name: 'param1', value: 'test1' });  */
function $$DoScriptRequest(containerName, url)
{
    var params = "?t=" + (new Date()).getTime();
    if (arguments.length > 2)
    {        
        for (var i = 2; i < arguments.length; i++)
        {
            var name = arguments[i].name;
            var value = escape(arguments[i].value);                        
            params += "&" + name + "=" + value;
        }
    }   
    
    var script = document.createElement("script");
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', url + params);    

    var container = document.getElementById(containerName);
    container.innerHTML = "";
    container.appendChild(script);  
}


серверная страница отдавала результат примерно в таком виде:

 var container = document.getElementById('divId');
 container.innerHTML = "<b>my html</b>";


или просто скрипт:

function myTest()
{
    alert('Test');
}
myTest();


Спасибо за статью! )

В IE6 такой подход тоже работает.
Подход описанный в моем комментарии. Есть там правда особенности и куча всяких «хаков» применять пришлось, но для моей простой задачи он вполне подошел.
Sign up to leave a comment.

Articles

Change theme settings