Могу ли я запрашивать элементы в окне, открытом с моего сайта, используя JavaScript? - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь запросить элементы в другом окне (другом домене), открытом с моего сайта.Например, у меня может быть такая ссылка:

<a href="#" onclick=openOtherWindow();>Click me</a>  

, которая запускает такой код:

function openOtherWindow() {
  var w = window.open("http://www.example.com/", "my_popup","height=500, width=800 left=20, top=40");
  console.log('Left:' + w.screenLeft);
  console.log('Num anchors: ' + w.document.anchors.length);
  console.log('Num images: ' + w.document.images.length);
  w.close();
}

Откроется окно, и на консоли отобразится:

Left: 20
Num anchors: 0
Num images: 0

(да, есть ссылки и изображения).Итак, я подумал, что окно на самом деле не загружено, поэтому попробовал что-то вроде:

function openOtherWindow() {
  var w = window.open("http://www.example.com/", "my_popup","height=500, width=800 left=20, top=40");
  w.onload = function() {
    console.log('Left:' + w.screenLeft);
    console.log('Num anchors: ' + w.document.anchors.length);
    console.log('Num images: ' + w.document.images.length);
  }
  w.close();
}

И теперь я ничего не получаю в консоли.Я попробовал другие способы увидеть, что происходит (замените console.log() на alert()), но безуспешно.

Я думаю, что у меня есть фундаментальное недопонимание, как узнать, когда другое окно открыто и загружено.Кто-нибудь может сбить меня с толку?

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

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

Например, представьте, что вы зарегистрировались на веб-сайте, и вам пришлют код активации по почте.Из «вежливости» они предоставляют ссылку на GMail, Hotmail, Yahoo Mail и, возможно, несколько других популярных почтовых провайдеров.Если бы они могли получить доступ к содержимому из нового окна, они могли бы легко прочитать ваш пароль при вводе.

Дополнительная информация:

0 голосов
/ 22 февраля 2012

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

var w = window.open("http://www.example.com/", "my_popup","height=500, width=800 left=20, top=40");
console.log(w.document.URL);
console.log(w.history.current);
console.log(w.document.documentElement.outerHTML);
w.close();

В Опере я получаю

about:blank

http://www.example.com/

<html dir="ltr"><head>
 <meta name="viewport" content="width=device-width">
</head>
<body></body></html>

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

...