Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Объект open класса window


Автор: Syltan 7.8.2010, 23:23
Не работает данный код в браузере Гуглхром не выводит в новом окне, которое запустилось после нажатия на кнопку, панель инструментов, меню,адресную строку где можно вводить юрл.
[code=html]
Вот попробовал, не срабатывает в гуглхроме,в других браузерах нормально,не выводит текст в гуглхроме, скажите что здесь не так?

Код

<html><head>
<title>Тренировочный документ</title>
<script type='text/javascript'>

function openas() {
mywindow = open('','newokno','width=500,height=400,status=1,menubar=1');
//Открываем документ
mywindow.document.open();
//Создаём документ
mywindow.document.write('<html><head><title>Создаём хтмл-документ');
mywindow.document.write('</title></head><body>');
mywindow.document.write('<center><font size=+3>');
mywindow.document.write('Этот HTML-документ создан при помощи JavaSript');
mywindow.document.write('</font></center>');
mywindow.document.write('</body></html>');

//Закрываем документ но не окно
mywindow.document.close();
}

</script>
</head>
<body>
<form>
<input type="button" value='Жми сюда' onClick="openas()">
</form>

</body>

</html>


2) В этой строке:
Код

mywindow = open(

то что возвращает метод open присваивается переменной mywindow,
 переменная mywindow превращается в объект?
Далее идёт такое:
Код

mywindow.document.open();

и такое:
Код

mywindow.document.write(

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

Автор: Amphiluke 7.8.2010, 23:40
Проверил во всех доступных браузерах, в т.ч. Chrome. Работает нормально smile

Метод open объекта document «открывает», т.е. создает новый документ в окне, уничтожая текущее содержимое, если оно присутствует. Этот метод необязателен к использованию, поскольку в случае необходимости последующий метод write сам вызовет этот метод. Метод close объекта document обязательный; он закрывает документ (не окно), указывая браузеру, что работа по его формированию закончена и его можно отображать как целое. 

Автор: Syltan 7.8.2010, 23:44
Код

Этот HTML-документ создан при помощи JavaSript


Вот это не выводщит гуглхром ,в этом проблема.

2)Скажите 
        mywindow.document.open();
mywindow. с точкой в самом начале почему пишется, кем он выступает, объектом что ли, он првратиося в объект здесь mywindow = open,
или другое что-то произошло после этого?

Автор: Amphiluke 7.8.2010, 23:52
Цитата(Syltan @  8.8.2010,  03:44 Найти цитируемый пост)
Скажите         mywindow.document.open();mywindow. с точкой в самом начале почему пишется, кем он выступает, объектом что ли, он првратиося в объект здесь mywindow = open,или другое что-то произошло после этого?

Метод open (объекта window) возвращает ссылку на объект созданного окна. Вот эту ссылку вы и запоминаете в переменной mywindow. Далее уже через точку вы обращаетесь к свойствам и методам этого открытого окна.


Цитата(Syltan @  8.8.2010,  03:44 Найти цитируемый пост)
Вот это не выводщит гуглхром ,в этом проблема.

хз, у меня работает. В Google Chrome. Попробуйте вывести alert'ом содержимое открытого документа. Для этого после вызова close допишите это:

Цитата(Syltan @  8.8.2010,  03:23 Найти цитируемый пост)

//Закрываем документ но не окно
mywindow.document.close();
alert(mywindow.document.body.innerHTML); // <----

Что покажет?

Автор: Syltan 8.8.2010, 00:02
Код

Вот эту ссылку вы и запоминаете в переменной mywindow...


А почему обращение идёт от mywindow  mywindow.document.open();
mywindow - это же прсото переменная а не объект или класс, почему через неё обращение идёт к объекту документ и его методу клосе().
Получается что ли mywindow(класс).document(объект).open()(метод объекта документ);?

2)Если вот это:

Код

//Закрываем документ но не окно
mywindow.document.close();


заменить на это

Код

//Закрываем документ но не окно
mywindow.document.close();
alert(mywindow.document.body.innerHTML); // <----


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

Автор: Amphiluke 8.8.2010, 00:12
Цитата(Syltan @  8.8.2010,  04:02 Найти цитируемый пост)
А почему обращение идёт от mywindow  mywindow.document.open();mywindow - это же прсото переменная а не объект или класс, почему через неё обращение идёт к объекту документ и его методу клосе().

Ну я же вам объясняю:

Цитата(Amphiluke @  8.8.2010,  03:52 Найти цитируемый пост)
Метод open (объекта window) возвращает ссылку на объект созданного окна.

Переменная mywindow хранит ссылку на объект window. Поэтому вы можете через эту переменную обращаться к свойствам и методам открытого нового окна.


Цитата(Syltan @  8.8.2010,  04:02 Найти цитируемый пост)
Вообще кнопка ничего не будет выдавать при запуске, будет просто толкьо нажиматься.

Чудеса!  smile Исследуйте консоль ошибок в Chrome. Есть какие-нибудь сообщения?

Автор: Syltan 8.8.2010, 00:24
1) вот это mywindow.document.close(); будет означать   (Ссылка на объект Window)/
Зачем переменной mywindow ссылаться вначале на объект window? И ещё, объект window принадлежит какому классу?

2)  По поводу гуглхрома. При запуске странички просто нажимается кнопка и всё, никаких ошибок гуглхром не выдаёт.
Или может вы имели ввиду как-то по другому проверить, если да то как? Консоль ошибок я не до конца понял, как это исследовать в гуглхроме.

Автор: Amphiluke 8.8.2010, 00:32
Цитата(Syltan @  8.8.2010,  04:24 Найти цитируемый пост)
Зачем переменной mywindow ссылаться вначале на объект window?

Ээээ… O_o  Как это зачем? Вы планируете манипулировать именно с документом в новом окне, а иначе как по-другому получить доступ к объекту document нового окна, не имея ссылки на само окно? Это все-таки его личное свойство document, а не чье-нибудь. И тем более не общее.
Просто попробуйте внимательно прочитать какой-нибудь более или менее «нормальный» учебник с основами JavaScript.


Цитата(Syltan @  8.8.2010,  04:24 Найти цитируемый пост)
При запуске странички просто нажимается кнопка и всё, никаких ошибок гуглхром не выдаёт.

Вы именно в консоли смотрели?

Добавлено через 4 минуты и 59 секунд
Цитата(Syltan @  8.8.2010,  04:24 Найти цитируемый пост)
Консоль ошибок я не до конца понял, как это исследовать в гуглхроме.

У меня консоль в Chrome вызывается клавишной комбинацией Ctrl+Shift+J. В том случае, если к моменту вызова консоли возникла ошибка JavaScript, в нижней части окна красным пишется описание ошибки. 

Автор: Syltan 8.8.2010, 00:37
Как в консоле посмотреть?
Я проверил не рабоатет кнопка во всех браузерах, врот привожу полный код.
Код

<html><head>
<title>Тренировочный документ</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<!--___________________________________________________________________-->

<script type='text/javascript'>

function openas() {
//Переменная mywindow хранит ссылку на объект window.
mywindow = open('','newokno','width=500,height=400,status=1,toolbar=1,menubar=1');
//Открываем документ
mywindow.document.open();
//Создаём документ
mywindow.document.write('<html><head><title>Создаём хтмл-документ');
mywindow.document.write('</title></head><body>');
mywindow.document.write('<center><font size=+3>');
mywindow.document.write('Этот HTML-документ создан при помощи JavaSript');
mywindow.document.write('</font></center>');
mywindow.document.write('</body></html>');

//Закрываем документ но не окно
mywindow.document.close();
alert(mywindow.document.body.innerHTML); // <----

</script>
</head>
<body>
<form>
<input type="button" value='Жми сюда' onClick="openas()">
</form>

</body>

</html>

Автор: Amphiluke 8.8.2010, 00:39
Syltan, я дописал в предыдущее сообщение

Автор: Syltan 8.8.2010, 00:43
Выдало такие ошибки.
Uncaught SyntaxError: Unexpected end of input
20trenirovka.html:28Uncaught ReferenceError: openas is not defined

Автор: Amphiluke 8.8.2010, 00:57
Syltan, вы забыли закрыть фигурную скобку в конце тела функции.  smile 

Автор: Syltan 8.8.2010, 01:09
Точно, но как-то странно, всё равно текста не отображается при нажатии на кнопку в новом окне гуглхрома, и в том новом окне нету меню и юрл-ссылки как в др.браузерах, вот что выходит после нажатия.

Автор: Amphiluke 8.8.2010, 08:15
А что пишет тот самый alert-то?
 

Автор: Syltan 8.8.2010, 20:33
Алерта не появляется в гуглхроме появляется только та картинка, последняя и больше ничего.

Автор: Amphiluke 8.8.2010, 20:58
Отлично.  smile  В консоли, как я понимаю уже ни о каких ошибках не пишется? Осталось локализовать в функции openas ту строчку, на которой происходит сбой. Можно последовательно ставить alert перед каждой строчкой в функции openas и таким образом наконец найти место, с которого alert перестанет появляться. Это место и будет местом ошибки. Оттуда можно начинать думать. 
На самом деле, конечно, скрипт прост, аки валенок,  smile ошибок вообще не должно быть. Я бы на вашем месте попробовал бы еще вот здесь:
Цитата(Syltan @  8.8.2010,  04:37 Найти цитируемый пост)
mywindow = open('','newokno','width=500,height=400,status=1,toolbar=1,menubar=1');

передать методу open в первом параметре не пустую строку, а адрес какого-нибудь реально существующего тестового документа (его содержимое не важно). Возможно, что ваш Google Chrome не может обратиться к свойству document нового окна, в котором «отродясь ничего не было». Хотя обычно браузеры формируют минимальную структуру документа с обязательными блоками <html>, <head>, <body>.

Автор: Syltan 8.8.2010, 21:23
В консоли пишется вот такое:
Код

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///C:/Documents%20and%20Settings/Admin/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%20%D1%81%D1%82%D0%BE%D0%BB/%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8/trenirovka.html. Domains, protocols and ports must match.
trenirovka.html:12Uncaught TypeError: Cannot call method 'open' of undefined

Автор: Amphiluke 8.8.2010, 21:54
Ну вот и попробуйте тогда то, что я вам говорил:

Цитата(Amphiluke @  9.8.2010,  00:58 Найти цитируемый пост)
передать методу open в первом параметре не пустую строку, а адрес какого-нибудь реально существующего тестового документа (его содержимое не важно).


Добавлено @ 21:58
Ваш Chrome считает, что документ с «адресом» about:blank с чужого домена, и поэтому не позволяет вам модификацию документа (политика одного источника). Странное поведение, ИМХО. Но если передать методу open адрес тестовой странички, то это должно устранить проблему, судя по описанию ошибки.

Автор: Syltan 8.8.2010, 23:02
Я попробовал в первый параметр передать страничку test.html с таким содрежанимем:
Код

<html>
<head><title>Содержание странички тест</title></head>
<body>
<center><h2>Привет мир</h2></center>
</body>
</html>


Код файла trenirovka.html

Код

<html><head>
<title>Тренировочный документ</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<!--___________________________________________________________________-->

<script type='text/javascript'>

function openas() {
//Переменная mywindow хранит ссылку на объект window.
mywindow = open('test.html','newokno','width=500,height=400,status=1,toolbar=1,menubar=1');
//Открываем документ
mywindow.document.open();
//Создаём документ
mywindow.document.write('<html><head><title>Создаём хтмл-документ');
mywindow.document.write('</title></head><body>');
mywindow.document.write('<center><font size=+3>');
mywindow.document.write('Этот HTML-документ создан при помощи JavaSript');
mywindow.document.write('</font></center>');
mywindow.document.write('</body></html>');

//Закрываем документ но не окно
mywindow.document.close();
alert(mywindow.document.body.innerHTML); // <----
}
</script>
</head>
<body>
<form>
<input type="button" value='Жми сюда' onClick="openas()">
</form>

</body>

</html>





Выдаёт такой результат:
Фот ниже, но в консоле как ни странно ошибок не выдаёт, но мой код не отправляется из треинорвки.хмл в тест.хтмл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)