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


Автор: Rtm 9.2.2006, 09:36
Закрывает текущее окно без запросов
Код

 window.opener="o";
 window.close();


обращается к тегу "<TD>" с ндексом [8]
Код

document.all.tags('td')[8].innerHTML


или допустим в таблице в <TR> обратиться к <TD>
Код

th.all.tags('td')[i].innerHTML

//где th объект на котором проиошло событие
т.е.
Код

....ondblclick='FunctionName(this)'...

function FunctionName(th){
th.all.tags('тэг')[номер].что_нужно (style/innerHTML и т.д. и т.п.)
}






Автор: kira 9.2.2006, 11:12
Цитата(Rtm @ 9.2.2006, 09:36)
Закрывает текущее окно без запросов
Код

 window.opener="o";
 window.close();


в firefox не работает

Автор: Rtm 9.2.2006, 12:18
Цитата(kira @ 9.2.2006, 11:12 Найти цитируемый пост)

в firefox не работает


потомучто в лисе Jscript а не JavaScript

Автор: Zeroglif 9.2.2006, 12:49
Цитата(Rtm @ 9.2.2006, 12:18 Найти цитируемый пост)
потомучто в лисе Jscript а не JavaScript


Переименуйте тему в "Вредное для начинающих... или как ньюбы прикалываются!" :-)

Автор: Aliance 9.2.2006, 14:56
Цитата(Rtm @ 9.2.2006, 13:18 Найти цитируемый пост)

потомучто в лисе Jscript а не JavaScript

smile

document.all устарело давно.

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

Автор: Rtm 9.2.2006, 15:29
а что актуально?
поделись, что ли...

Автор: sergejzr 9.2.2006, 15:46


Цитата(kira @ 9.2.2006, 09:12 Найти цитируемый пост)

в firefox не работает

Это нигде не будет работать просто так. Автор не упомянул, что закрывать скриптом можно только окошки, скриптом же и открытые.
Rtm, зачем было создавать эту тему? Смысл? Тем более с дезинформирующей информацией.
Цитата(Rtm @ 9.2.2006, 10:18 Найти цитируемый пост)

потомучто в лисе Jscript а не JavaScript

Во первых, это в ИЕ JScript, а в лисе как раз яваскрипт, во вторых это для поставленной задачи в принципе одно и тоже.
Уже давно существуют стандарты, по которым код пишется браузеронезависимо. Например
document.getElementById(id) будет работать везде, так же как и document.getElementsByName(name)
Это стандарт и это следует
использовать

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

Автор: Rtm 9.2.2006, 16:34
с этим не согласен:
Цитата

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

в IE работает
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title></title>
</head>
<body onload="javascript:window.opener='o';window.close()">
</body>
</html>


ok
сори smile
впредь буду осмотрительнее
всем спасибо

Автор: 12345c 9.2.2006, 17:08
window.opener='o'... в IE и Опере (7.54) работает. Довольно интересный баг (не что иное как) браузеров). Получается, они решают о предупреждении только по отсутствию свойства opener.


Второй пример тоже интересен как показ различий в интерпретациях браузеров. Берём пример:
Код
<table border=1><tr onclick='FunctionName(this)'><td>1111111</td><td>2222222</td></tr></table>
<script>
function FunctionName(th){
th.all.tags('TD')[1].style.color='red';
}</SCRIPT>
По клику на строке высвечивается вторая ячейка.
Но, мы хорошо знаем, что у tr нет свойства all. Почему же пример работает? В FF all поддерживается примерно с 1.05. Запускаем там - и видим, естественно, ошибку. tr.all не существует. В ie/opera подозреваем неладное и пишем такой пример для разбора:
Код
<table border=1><tr><td>0000000</td><td>3333333</td></tr></table>
<table border=1><tr id=tr1 onclick='FunctionName(this)'><td>1111111</td><td>2222222</td></tr></table>
<script>
function FunctionName(t){
    alert(t.id)
t.all.tags('TD')[1].style.color='red';
}
</SCRIPT>
По-прежнему, высветились 22222, но почему? Меняем t.tr1.all.tags('TD')[1] на document.all.tr1.all.tags('TD')[1] и видим, что у тегов, оказывается, есть свои подколлекции! Ура, новое знание об объектной модели ie.

Итого, примеры совсем не для начинающих, а, скорее, как пара задач для обучающихся (почему это работает здесь, а не работает там), которые уже поняли суть объектной модели документа и смогли бы разобраться в тонкостях интерпретации кодов.

Автор: Rtm 9.2.2006, 17:25
Цитата(12345c @ 9.2.2006, 17:08 Найти цитируемый пост)

Довольно интересный баг (не что иное как) браузеров). Получается, они решают о предупреждении только по отсутствию свойства opener.


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


Автор: 12345c 9.2.2006, 17:53
Так с этим багом можно открывать вредный i-фрейм, который закроет рабочее окно с историей ссылок и набранным кодом, с накопленными аяксовыми данными, в самый неподходящий момент. Хорошо, что хоть есть противоядие - onBeforeUnload, надо будет иметь в виду. Хотя и его можно переопределить из фрейма. И с чужого сайта может не сработать (проверьте, если не трудно - top.opener=1;top.close() из фрейма с чужого сайта).

Автор: Zeroglif 9.2.2006, 23:08
Цитата(12345c @ 9.2.2006, 17:08 Найти цитируемый пост)
Итого, примеры совсем не для начинающих, а, скорее, как пара задач для обучающихся (почему это работает здесь, а не работает там), которые уже поняли суть объектной модели документа и смогли бы разобраться в тонкостях интерпретации кодов.


Ньюб почитает про "обучение" и поведётся... в обратную сторону, а ему надо стараться писать в русле времени и его будущих требований. Приведённые примеры не открывают никаких америк касательно возможности работать с коллекцией all внутри конкретного элемента, http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/scripting_elements_collections.asp. Учить же народ дотрагиваться до нужного элемента через object.all - это, мягко говоря, вряд ли полезно, при острой необходимости (подддержка старых IE, какая-нибудь особенная группировка элементов и проч.) он придёт к этому сам и будет с грустью и тоской разбирать квирки остальных браузеров, кас. all.

Ссылку на opener мы, как известно, можем прописать руками, соответственно формула:
Код

window.opener = self;
window.close();


или:
Код

window.opener = "пишучтохочу";
window.close();

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

Автор: Alx 20.2.2006, 19:22
Цитата(12345c @ 9.2.2006, 17:53 Найти цитируемый пост)
(проверьте, если не трудно - top.opener=1;top.close() из фрейма с чужого сайта).

с чужого сайта никакие скрипты не будут работать в твоем окне smile

потом, что вы приципились к присвоениею "o" window.opener`у?
люди ж так и будут писать smile)
доастаточно просто объявить его, и присвоить true или 1, так просто логичнее. ;)

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

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