Почему при использовании API Карт Google не появляется предупреждение «Политика одинакового происхождения»? - PullRequest
43 голосов
/ 29 мая 2009

Я делаю вызов веб-службы RESTful на моей странице JavaScript и получаю следующее предупреждение:

"Эта страница имеет доступ к информации, которая не находится под ее контролем. Это создает угрозу безопасности. Хотите продолжить?"

Теперь я прочитал об этом и знаю о междоменной политике того же происхождения . Однако я не получаю таких предупреждений, когда использую другие API, такие как Google Maps API. Очевидно, что домен не совпадает с моим локальным доменом. В чем разница?

Мое первоначальное предположение состоит в том, что Google «импортируется» на страницу с помощью тега <script>, а мое потребление REST использует XMLHttpRequest. Если это так, то в чем разница между этими двумя подходами, когда один заслуживает предупреждения, а другой нет?

Ответы [ 2 ]

6 голосов
/ 29 мая 2009

Следующее может объяснить вещи: http://markmail.org/message/5wrphjwmo365pajy

Кроме того, они используют некоторые хаки сценариев (например, вставка сценария в DOM для получения запрошенных данных вместо XHR).

1 голос
/ 05 января 2016

Я хотел бы подвести итог, каким было решение этой проблемы. Вы можете найти полезный URL здесь .

По сути, вы вводите код через тег <script> страниц при импорте JavaScript. Все, что импортируется через этот тег, выполняется немедленно в глобальном контексте. Поэтому вместо того, чтобы передавать файл JavaScript, передайте URL-адрес веб-сайту, который возвращает страницу, не содержащую HTML-теги, а страницу, которая возвращает текст кода JavaScript, который вызывает обратный вызов в вашем коде.

Вы используете параметры URL, чтобы сообщить странице, какой «обратный вызов» вернуть, и любые параметры, которые необходимо ввести в обратный вызов. Например:

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script>

Когда это оценено, содержимое страницы, возвращаемое параметром 'src':

myCallback( myParam );

На стороне сервера вы создадите сайт по этому URL, который переопределяет эквивалент OnLoad (с любым языком на стороне сервера, который вы используете). Вместо HTML-кода страницы OnLoad будет принимать параметры URL-адреса и переизбирать их в соответствии с вышеуказанным обратным вызовом.

Когда выполняется подстановка, обратный вызов немедленно вызывается, когда клиент загружает страницу. Преимущество этого заключается в том, что URL 'src' не обязательно должен соответствовать домену размещенной страницы.

Вот как будет выглядеть HTML-страница клиента в конце:

<script type="text/javascript">
    var myCallback = function( myParam ) {
        alert( "this was called across domains!" );
    };
</script>
<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param=myParam></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...