Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не срабатывает window.onload() (https://javascript.ru/forum/events/2497-ne-srabatyvaet-window-onload.html)

Андрей Параничев 06.01.2009 18:22

Вот такой код должен работать точно:
var newWind = window.open("http://javascript.ru/");
newWind.onload = function () {
  newWind.location = newWind.document.getElementsByTagName("A")[3];
  };


Только запускать его надо с главной страницы, а не страницы форума - потому что даже в пределах одного домена, страницы с субдоменов имеют только одностороннюю связь.

Freak 06.01.2009 18:29

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

запуск этого скрипта открыл новое окно с http://javascript.ru/
в исходном окне он выдал мне строку
function () { newWind.location = newWind.document.getElementsByTagName("A")[3]; }
и усе...

Андрей Параничев 06.01.2009 18:39

Freak,
То, что выдает браузер при выполнении JavaScript из адресной строки - другой вопрос, там есть свои особенности.
Какая вообще суть вашей задачи?

Цитата:

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

Окно откроется только тогда, когда выполнение кода покинет ближайший контекст выполнения, так что в вашем случае обработчик onload будет назначен до начала загрузки документа.

Freak 06.01.2009 19:02

ну в принципе, суть написать строку на яваскрипт, вставив которую в адресную строку, с нужного домена, я бы смог открыть окно и в нем другую стр этого же домена, в этом доке найти ссылку и перейти по ней в этом, новосозданном окне

integrable 18.02.2009 01:44

У меня похожая проблема: событие onLoad возникает до того, как страница загрузилась полностью, и нельзя выполнять какие-либо действия с элементами дочернего окна.

наприммер
new = open("www.mysite.ru", "");

function dosomething()
{
    alert('start');
    new.document.getElementById('element').value = "text";
    alert('finish');
}


new.onload = dosomething();


В результате увидим тока 'start', текста елемента 'елемент' не изменится, надпись 'finish' не появится...

Можно конечно поставить задержку в главном скрипте дабы подождать пока загрузится дочернее, но это не решение проблемы..

Может кто-то знает нормальное решение проблемы?

Андрей Параничев 18.02.2009 02:05

integrable,
Вы должны в качестве обработчика установить саму функцию, а не результат её выполнения:
new.onload = dosomething; // Без скобок вызова


Кстати, "new" является зарезервированным словом для языка JavaScript.
Крайне не рекомендуется называть так переменные или функции.

integrable 18.02.2009 02:57

спс большое, а то я уже совсем запутался...

и еще вопрос, если не затруднит:

Для сайта с чужого домена с родительского окна, как в предыдущем примере, onload поменять нельзя, я так полагаю.
А нужно как-то проследить момент, когда этот "чужой" сайт загрузился в дочернем окне.. Это возможно как-то???

Андрей Параничев 18.02.2009 03:05

integrable,
Нет, не получится.

integrable 18.02.2009 03:14

Андрей Параничев
спс за помощь!


Часовой пояс GMT +3, время: 08:46.