Если Javascript разрешен только доступ к сценариям из того же домена, как веб-сайт может создавать гибридные приложения, которые должны читать и изменять содержимое из другого домена?
Если Javascript разрешен только доступ к сценариям из того же домена, как веб-сайт может создавать гибридные приложения, которые должны читать и изменять содержимое из другого домена?
Ответы:
Если API, к которому вы пытаетесь получить доступ, поддерживает JSONP , вам нужно только указать имя функции javascript в своем запросе, тогда JSONP возвращает javascript, myfunc({the:data});
который вы можете запускать как обычный javascript, поэтому вы должны создать новый <script src="www.website.com/somecall?jsonp=myfunc">
тег для «отправить запрос» (jQuery делает это автоматически, если вы используете type: jsonp
в $.ajax
запросах).
Недостатком является то, что для поддержки JSONP требуется поставщик API.
Flash может получить доступ к содержимому между доменами, если на целевом веб-сайте есть crossdomain.xml
файл, в котором указано, что он разрешает это, что обычно имеет место на серверах, которые предоставляют API).
Недостатком является то, что для этого требуется Flash в браузере пользователя, а веб-сайт, с которого вы получаете данные, должен иметь файл crossdomain.xml, который разрешает запросы между доменами.
Языки на стороне сервера, такие как PHP, не имеют ограничений BS в одном домене, поэтому вы можете иметь скрипт, который действует как прокси (например, загрузка через одно из расширений http, например cURL).
Дополнительным преимуществом является то, что вы можете очистить данные (или даже скопировать несколько источников) на сервере, прежде чем перенаправлять их на свою веб-страницу / javascript, чтобы вы могли даже извлечь только полезную часть данных, что удобно при работе в мобильном веб-приложении. где пропускная способность может быть проблемой.
Недостатком является то, что все запросы должны проходить через ваш сервер, что увеличивает нагрузку на ваш сервер.
Однако преимущество заключается в том, что он будет работать с любым ресурсом, поскольку для него не требуется, чтобы цель поддерживала кросс-домен или jsonp. Так что, если ничего не работает, это будет.
Internet Explorer имеет кросс-доменный запрос
Firefox 3.5+ имеет стандарт обмена между источниками , но он требует ресурсов, к которым вы пытаетесь получить доступ, для включения специальных заголовков, например, в PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Несколько других основных браузеров также поддерживают это , поэтому, если вам не нужно поддерживать старые браузеры и если вы можете получить ресурсы, к которым вы пытаетесь получить доступ для отправки этих заголовков, это может быть вашим лучшим выбором, в противном случае на стороне сервера сценарий будет моей рекомендацией.
Firefox также имеет пользовательские настройки capability.policy.default.XMLHttpRequest.open
, но я бы не стал рассчитывать, что пользователь изменит настройки в своем браузере.
Вы можете использовать API (другого домена) для этого. Ваш Javascript вызовет файл PHP (или другой файл сценария), который находится на вашем веб-сервере (вашем домене), который вызовет API (другого домена, использующего CURL) и получит ответ от вас.