Выполнение JavaScript-вызова через домены - PullRequest
1 голос
/ 22 сентября 2010

Вот цель:

Передайте тег сценария, который ссылается на файл JavaScript на удаленном сервере.Этот файл JavaScript должен возвращать HTML, который затем будет отображаться на вызывающей HTML-странице.

Я попытался подойти к этому двумя способами:

Сначала я попытался использовать XMLHttpRequest в JavaScript дляНазовите этот удаленный сервер.В IE это будет работать так, как ожидается, но FF, Safari и Chrome будут возвращать пустой ответ.Общий ответ, который я получил от моего исследования, заключался в том, что запрос был заблокирован, поскольку сервер, к которому он пытается получить доступ, отличается от того, где он работает (как на локальном хосте, так и на разных портах).Подобно гаджетам Google, они эффективно предоставляют вам простой тег сценария, который ссылается на внешний JavaScript.Из того, что я могу собрать, похоже, что происходит какое-то действие iframe, просто выполняемое с помощью используемого базового URL (пример ниже).Похоже, это путь, хотя использование iframe не было моей первоначальной мыслью.Я предполагаю, что код Google возвращает iframe в виде HTML в файл HTML, в который встроен этот скрипт.

Есть предложения о том, как мне поступить?

<script src="http://www.gmodules.com/ig/ifr?url=http://ralph.feedback.googlepages.com/googlecalendarviewer.xml&amp;synd=open&amp;w=320&amp;h=200&amp;title=&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script>

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

JSONP - очень распространенный способ иметь дело с той же политикой происхождения .Поскольку большинство фреймворков javascript (например, jquery) уже поддерживают его, вам не нужно вдаваться в технические детали, чтобы использовать его.
Вы также можете сделать это самостоятельно, создав тег script из javascript (как вы уже упоминали),Фрагмент кода Google Analytics является примером такого подхода:

      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = 'url here';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);

Что касается идеи iframe (если я вас правильно понимаю), она не сработает.Вы можете использовать элемент iframe на своей странице для отображения контента с другого сервера, но браузер не позволит вам получить к нему доступ с главной страницы, используя javascript.

edit
Этот оригиналдетали предложения Использование JSONP:
http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

1 голос
/ 22 сентября 2010

Вам понадобится серверный прокси для звонков в x-domain.

Есть много реализаций, доступных в Интернете, или вы, вероятно, можете сделать это на языке по вашему выбору, чтобы вписаться в ваш стек.

Более подробная информация с графикой и прокси PHP доступна здесь - http://developer.yahoo.com/javascript/howto-proxy.html

...