В JavaScript, как я могу открыть страницу в новом окне браузера и прокрутить до определенной позиции? - PullRequest
4 голосов
/ 18 мая 2011

Почему следующий JavaScript скрипт открывает новое окно, но не может прокрутить страницу вниз?(Обратите внимание, что я запустил этот скрипт в веб-консоли в Firefox 4.)

w=window.open("http://stackoverflow.com");w.scrollTo(0,150);

Как открыть страницу в новом окне браузера и дать указание этому окну прокрутить до определенной позиции?

Ответы [ 5 ]

5 голосов
/ 27 октября 2011

Я нашел кое-что интересное в этом ...

Я всегда знал, что вы можете прокрутить до якоря с именем - на самом деле, так нас всех учили. Но я просто попытался перейти к div с идентификатором, и это сработало!

Так, например, если на целевой странице есть div с id = "bobo", тогда ссылка http://www.example.com/index.php/home#bobo только что сработала для меня.

Возможно, у меня плохое поведение. Я чувствую, что слышал об этом раньше, если бы это было возможно. Но все, что я знаю, я пытался сделать то же самое, и по любой причине это работает.

FWIW, ссылка, которую я использую - http://www.religionnews.com/index.php?/rnsblog#blog

2 голосов
/ 19 мая 2011

Если вы владеете обоими доменами, вы можете использовать window.postMessage , чтобы сообщить позицию прокрутки другому окну.
На одной странице вы создаете postMessage, а на другой добавляете слушатель событий.

Если вам требуется поддержка старых браузеров, вы можете использовать window.name для передачи некоторых данных между окнами.

Если у вас нет обоих доменов, вам не повезло из-за SOP . Это встроенная защита в браузерах, позволяющая избежать междоменных злоупотреблений.

1 голос
/ 19 мая 2011

Скрипт не работает, поскольку он нарушает междоменную безопасность.См. это и это .Chrome сообщает об аналогичной ошибке:

> w=window.open("http://stackoverflow.com");
DOMWindow
84Unsafe JavaScript attempt to access frame with URL http://stackoverflow.com/ from frame with URL chrome://newtab/. Domains, protocols and ports must match.
> w.scrollTo(0,150);
89Unsafe JavaScript attempt to access frame with URL http://stackoverflow.com/ from frame with URL chrome://newtab/. Domains, protocols and ports must match.
TypeError: Object [object DOMWindow] has no method 'scrollTo'
1 голос
/ 18 мая 2011

Вы пытаетесь прокрутить до того, как окно будет готово. Обратите внимание, что следующие работы:

w=window.open("http://stackoverflow.com");
setTimeout(function() { w.scrollTo(0,150) }, 1000);

Лучше всего выполнить прокрутку в функции w.onload или DOM ready, но я не могу заставить ее работать.

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

Дерек прав насчет междоменной безопасности, мешающей вам сделать это.Поэтому один из ответов - отключить безопасность домена, загрузив Chrome: Chrome --disable-web-security Это из ЭТОГО экземпляра Chrome, запустите свой javascript.Дочерние окна будут наследовать переключатель нагрузки, и теперь ваш scrollTo будет работать.

...