Межсайтовый XMLHttpRequest

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

Рассмотрим index.html, размещенный на xyz.com, содержащий следующее:

<script type = "text/javascript" src = "http://abc.com/some.js"></script>

Сможет ли some.js использовать XMLHttpRequest для публикации данных на abc.com? Другими словами, является ли abc.com безоговорочно доверенным, потому что мы загрузили Javascript оттуда?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
12
0
39 254
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Самым простым вариантом для вас будет проксирование вызова через сервер, загружающий javascript. Таким образом, some.js будет звонить на сервер хостинга, и этот сервер перенаправляет запрос на abc.com.

конечно, если это не вариант, потому что вы не контролируете хостера, есть несколько вариантов, но, похоже, он погряз в трудностях кроссбраузерности: http://ajaxian.com/archives/how-to-make-xmlhttprequest-calls-to-another-server-in-your-domain

Ответ принят как подходящий

Will some.js be able to use XMLHttpRequest to post data to abc.com? In other words, is abc.com implicitly trusted because we loaded Javascript from there?

Нет, поскольку скрипт загружен в отдельный домен, у него не будет доступа ...

Если вы доверяете источнику данных, возможно, JSONP будет лучшим вариантом. JSONP включает динамическое добавление новых элементов SCRIPT на страницу с SRC, установленным для другого домена, с обратным вызовом, установленным в качестве параметра в строке запроса. Например:

function getJSON(URL,success){
    var ud = 'json'+(Math.random()*100).toString().replace(/\./g,'');
    window[ud]= function(o){
        success&&success(o);
    };
    document.getElementsByTagName('body')[0].appendChild((function(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = URL.replace('callback=?','callback='+ud);
        return s;
    })());
}

getJSON('http://YOUR-DOMAIN.com/script.php?dataName=john&dataAge=99&callback=?',function(data){
    var success = data.flag === 'successful';
    if (success) {
        alert('The POST to abc.com WORKED SUCCESSFULLY');
    }
});

Итак, вам нужно разместить свой собственный скрипт, который может использовать PHP / CURL для публикации в домене abc.com, а затем будет выводить ответ в формате JSONP:

Я не очень хорошо разбираюсь в PHP, но может быть что-то вроде этого:

<?php
    /* Grab the variables */
    $postURL = $_GET['posturl'];
    $postData['name'] = $_GET['dataName'];
    $postData['age'] = $_GET['dataAge'];

    /* Here, POST to abc.com */
    /* MORE INFO: http://uk3.php.net/curl & http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html */

    /* Fake data (just for this example:) */
    $postResponse = 'blahblahblah';
    $postSuccess = TRUE;

    /* Once you've done that, you can output a JSONP response */
    /* Remember JSON format == 'JavaScript Object Notation' - e.g. {'foo':{'bar':'foo'}} */
    echo $_GET['callback'] . '({';
    echo "'flag':' . $postSuccess . ',";
    echo "'response':' . $postResponse . '})";

?>

Итак, ваш сервер, который вы контролируете, будет действовать как посредник между клиентом и abc.com, вы отправите ответ клиенту в формате JSON, чтобы его можно было понять и использовать JavaScript ...

Вы можете использовать easyXSS. Это библиотека, которая позволяет передавать данные и вызывать методы через границу домена. Это довольно просто, и вы должны уметь им пользоваться. На сайте code.google.com есть много примеров.

Другие вопросы по теме