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)

Freak 06.01.2009 11:35

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

var newWind=window.open();
newWind.onload= function () {
  newWind.location=newWind.document.getElementsByTagName("A")[3];
  };
newWind.location="http://javascript.ru/";


Насколько я понимаю, ведь событие onload должно возникать после смены location окна....но оно почему то не срабатывает
Скрипт только переходит на javascript.ru и все
В чем может быть проблема?

Octane 06.01.2009 11:43

В JavaScript действует правило одного источника. Нельзя управлять данными с другого домена.

Freak 06.01.2009 11:47

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

Octane 06.01.2009 12:41

Возможно, только в пределах одного домена

Freak 06.01.2009 16:51

хммм
может я неправильно понимаю значение слова "домен", но разве вышеприведенный скрипт не действует в домене http://javascript.ru/ ?

Octane 06.01.2009 17:00

Вы свой скрипт не с javascript.ru же запускаете?

Freak 06.01.2009 17:05

нет....а если запущу с него, и создастся новое окно то все будет работать?

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

Да.

Freak 06.01.2009 18:16

захожу на javascript.ru, вставляю этот код через javascript:
и все как я и рассказывал...

Freak 06.01.2009 18:16

вставляю его в адресную строку...

Андрей Параничев 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, время: 03:06.