Как перевод Google (на панели инструментов) позволяет обойти ограничения межсайтового скриптинга? - PullRequest
3 голосов
/ 04 апреля 2011

Я недавно установил панель инструментов Google и использовал функцию «перевод слова», когда вы наводите курсор мыши на слово (например, просматриваете французскую газету Le Monde), и он вызывает перевод на английский язык. Очень круто.

Но мне было интересно, как они на самом деле это реализуют? Очевидно, что код (javascript?) В их плагине панели инструментов должен общаться с сервером, чтобы выполнить поиск. Но домен - lemonde.fr, не является ли это междоменным запросом, который невозможен? Панель инструментов работает на любом сайте, поэтому для этого сайта не требуется устанавливать специальный код.

Или правила для кода подключаемого модуля браузера отличаются от JavaScript, встроенного в сам сайт?

1 Ответ

3 голосов
/ 04 апреля 2011

Обычный запрос XMLHttpRequest между доменами блокируется браузером, но это не единственный способ отправить межсайтовый запрос. Распространенным способом решения этой проблемы является JSONP , который фактически аналогичен добавлению элемента скрипта:

<script type="text/javascript"
         src="http://google.com/translate.js?word=baguette">
</script>

Этот тег <script> будет запрошен у Google - он не требует POST, не является строго AJAX и не будет заблокирован. Если Google возвращает разумный ответ, вы можете использовать его. Есть много других способов связи , которые не заблокированы, но JSONP обычно является наиболее простым.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...