Я хочу предоставить фрагмент кода 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 оттуда?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Самым простым вариантом для вас будет проксирование вызова через сервер, загружающий 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 есть много примеров.