Подтвердить что ты не робот

Почему я не могу получить предупреждение "того же происхождения" при использовании API Карт Google?

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Я хотел бы подытожить, какое решение было для этой проблемы. Вы можете найти полезный 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>