Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Кросс-браузерные функции (https://javascript.ru/forum/project/3754-kross-brauzernye-funkcii.html)

B~Vladi 20.05.2009 16:40

Цитата:

Сообщение от Riim (Сообщение 19550)
Правда? Ух, ты!
Знаете, много косяков полезет, когда вы начнете применять эти функции к реальным сайтам.

Когда полезет - вам икнёцццццца:)

И мне кажется это уже извращение кода. Человек, который не указал DTD скорее всего даже не знает, что такое скрипт, поэтому этот вариант не критичен.

B~Vladi 20.05.2009 16:44

Riim, а можно вопрос?! Только чесно!

Вам когда-нибудь приходилось оприделять размер клиентской области руками?! без фрейморков?! Если да, то можно взглянуть на код, которому вы доверяете?!

Riim 20.05.2009 16:48

Цитата:

Сообщение от B~Vladi
Когда эти значения изменятся - тогда и поговорим.

Я был уверен, что они (значения) разные, но все же на всякий проверил. И знаете что: они разные.

Цитата:

Сообщение от B~Vladi
А пока это всё работает - это кроссбраузерно.

Еще раз повторю:
Цитата:

Сообщение от Riim
много косяков полезет, когда вы начнете применять эти функции к реальным сайтам


B~Vladi 20.05.2009 16:57

Цитата:

Сообщение от Riim (Сообщение 19554)
Я был уверен, что они (значения) разные, но все же на всякий проверил. И знаете что: они разные.

DOCTYPE:

null, HTML 4.01 Transitional, HTML 4.01, XHTML 1.0 Transitional, XHTML 1.0 Strict, XHTML 1.1.

Opera 9.24, 9.63, 9.64, 10.00 1

alert(document.body.clientWidth==document.documentElement.clientWidth);


Выводит true. Где ж разные?!

B~Vladi 20.05.2009 17:00

То же самое и в FF 2.0.0.8, 3.0.8, 3.0.10.

B~Vladi 20.05.2009 17:04

То же самое и в IE 6,7,8.

Сдаётся мне, Вы просто издеваетесь...

Riim 20.05.2009 17:24

Я много печатаю.

Riim 20.05.2009 17:58

Цитата:

Сообщение от B~Vladi
Вам когда-нибудь приходилось оприделять размер клиентской области руками?! без фрейморков?!

О, это очень интересная тема. Дело в том, что это сейчас есть целая куча разных фреймворков. Можно полазить по ним и найти всю необходимую кроссбраузерность. Раньше их (фреймворков) можно сказать не было, а коду неизвестной древности с форумов доверять было нельзя. Нужно было практически методом "тыка" перебирая разные свойства подбирать правильные для каждого браузера. Все это нужно было примерять к разным вариантам верстки и прочим ситуациям. Например, в IE6 функция, идеально определяющая высоту всего документа (не клиентской части) при 0-1 скроллингах, почему то при обоих скроллингах ошибалась на один пиксель. На все эти опыты уходило очень много времени. Сейчас все намного проще, но по инерции и сейчас иногда случайно возвращаюсь к старым э-э-э, ну пусть будет: способам. Например со строчкой
window.parseFloat(window.opera.version()) < 9.5

как раз связана забавная ситуация: захожу на одну страничку через оперу и с ужасом обнаруживаю, что tooltip появляется явно не в том месте, где должен. Меня это очень удивило, т. к. я точно помнил, что тщательно все протестировал. В том числе и в опере. Установил заметно более старую оперу - все нормально. Начал поочередно, в обратном порядке (от более новой к старой), устанавливать разные версии (я собираю их иногда). В конце концов, вычислил, что изменение произошло при переходе на 9.5 . На все это ушло пол-ночи. На следующий день, вечером, с удивлением обнаружил, что версия PrototypeJs давно обновилась, и за пару минут нашел в новой версии число 9.5 . Т. е. пол-ночи было убито зря.

Это все я к тому, что мне действительно приходилось определять размер клиентской области "руками" (как вы выразились). Причем у меня с этим столько связано, что вам и не снилось.

Таки допечатал.

Цитата:

Сообщение от B~Vladi
Если да, то можно взглянуть на код, которому вы доверяете?!

Он жутко секретный. Но он очень похож на тот, что в prototype-1.6.0.3.js (str: 2689)
Разница лишь в том, что я добавил проверку compatMode и оптимизировал своим чудо-способом, который на этом форуме признан жутко не читабельным.

Цитата:

Сообщение от B~Vladi
Сдаётся мне, Вы просто издеваетесь...

Нет, я на полном серьезе.
У меня так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>blank</title>
	<script type="text/javascript">
window.onload = function() {
	alert([
		document.body.clientHeight,
		document.documentElement.clientHeight
	].join('\n'));
};
	</script>
</head>
<body>
</body>
</html>


Выводятся два разных числа.

Опера такая:

Version - 10.00 alpha
Build - 1139

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

B~Vladi 20.05.2009 18:16

Для чего все эти сложности с массивом?!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>blank</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
window.onload=function() {
	alert(document.body.clientWidth+', '+document.documentElement.clientWidth);
}
</script>
</head>
<body>
</body>
</html>


А вот, что у меня:

Opera 10.00 1, Build - 1355.
1263, 1279.

Opera 9.64, Build - 10487
1263, 1279

Opera 9.24, Build - 8816
1274, 1274

Отличается из-за левой панели.

Разрешение экрана - 1280х1024.

Получается, что свойство document.documentElement.clientWidth показывает настояший размер, в отличии от document.body.clientWidth. Почему же вы тогда утверждаете обратное?!

B~Vladi 20.05.2009 18:20

Почему я раньше писал, что document.documentElement.clientWidth==document.bod y.clientWidth в опере?!
Установите margin и padding в 0 для html и body и они совпадут.

Riim 20.05.2009 18:28

Цитата:

Сообщение от B~Vladi
Для чего все эти сложности с массивом?!

Когда вам нужно будет вывести не 2, а 20 значений тогда поймете.
Здесь просто по привычке.

Цитата:

Сообщение от B~Vladi
Отличается из-за левой панели.

Цитата:

Сообщение от B~Vladi
Установите margin и padding в 0 для html и body и они совпадут.

Не обязательно. Там много причин.

Цитата:

Сообщение от B~Vladi
Почему же вы тогда утверждаете обратное?!

Обратного для всех версий я не утверждал. Еще раз вчитайтесь в строку:
window.parseFloat(window.opera.version()) < 9.5


Цитата:

Сообщение от B~Vladi
Opera 10.00 1, Build - 1355.
1263, 1279.

Opera 9.64, Build - 10487
1263, 1279

Opera 9.24, Build - 8816
1274, 1274

Так вы все-таки признаете, что были неправы? И я могу спокойно идти спать? Отпустите меня, пожалуйста. Я уже 4 часа должен спать.:)

B~Vladi 20.05.2009 18:32

:lol:
Конечно...

Но я прав:)

B~Vladi 20.05.2009 18:33

1263, 1279 - разные значения мы получаем из-за margin и padding, установленных по-дефолту... Каждый более-менее опытный верстальщил их обнулит и значения совпадут.

Riim 20.05.2009 18:34

Цитата:

Сообщение от B~Vladi
Но я прав

Да да. Я уже писал:
Цитата:


Они все глупенькие там. А вы умный.


Riim 20.05.2009 18:35

Цитата:

Сообщение от B~Vladi
1263, 1279 - разные значения мы получаем из-за margin и padding, установленных по-дефолту... Каждый более-менее опытный верстальщил их обнулит и значения совпадут.

Еще раз. Контрольный:

Цитата:

Сообщение от Riim
Не обязательно. Там много причин.


B~Vladi 20.05.2009 18:35

А в Opera 9.24 это происходит из-за левой панели. Она как раз и отнимает эти 5 пикселей... так что всё правильно...

B~Vladi 20.05.2009 18:35

Riim,
Дайте мне свой код, а?!

B~Vladi 20.05.2009 18:36

Можно завтра:)

x-yuri 20.05.2009 20:17

Цитата:

оптимизировал своим чудо-способом, который на этом форуме признан жутко не читабельным
улыбнуло :)

по поводу размеров клиентской области есть такая статья - http://www.howtocreate.co.uk/tutoria.../browserwindow

B~Vladi 21.05.2009 09:58

Цитата:

Сообщение от x-yuri
по поводу размеров клиентской области есть такая статья - http://www.howtocreate.co.uk/tutoria.../browserwindow

Понравилась табличка, но она не актуальна уже:(

Если у кого эти ф-ции возвращают неправельный результат - пожалуйста! напишите подробнее об этом! какой браузер, сборка, DTD и при каких условиях это проявляется. Возможно после установки каких-либо стилей у вас стала врать ф-ция или ещё что-нить. И, пожалуйста, не пишите вещей вроде "а ты попробуй дтд сменить - я уверен всё слетит!". Сначала сам поменяй, а потом говори! Ненада глупых догадок. clientWidth - это реализация браузера, а не свойство из спецификации DOM, поэтому смена DTD, думаю, не должна на это влиять. Хотя... Ядро браузера - потёмки... Спасибо.

Riim 21.05.2009 10:55

Цитата:

Сообщение от B~Vladi
Сначала сам поменяй, а потом говори! Ненада глупых догадог.

Глупые? Хм.. Ну что же, тогда дальше сам разбирайся. Там кстати к каждой второй функции можно придраться не в меньшей степени, чем к этой. Да и эту мы только начали разбирать. Ведь кроме строки
parseFloat(window.opera.version()) < 9.5

есть еще строка
B.WebKit && !document.evaluate

И еще есть таинственный compatMode, о котором ты ничего не спросил. Наверно потому что лучше всех знаешь что это. Если так, то странно, что не используешь где надо. Или может не актуально совсем?

На данный момент функции очень далеки от понятия "кроссбраузерные". Это выше было доказано на конкретном примере. Но раз уж ты, несмотря на это, продолжаешь считать всех глупыми, а себя самым умным, то флаг тебе в руки, барабан на шею, и !самостоятельно! вперед в светлое будущее.

B~Vladi 21.05.2009 11:14

Цитата:

Сообщение от Riim
Там кстати к каждой второй функции можно придраться не в меньшей степени, чем к этой.

Вперёд. Кто не даёт?!

Цитата:

Сообщение от Riim
Глупые? Хм.. Ну что же, тогда дальше сам разбирайся.

Речь шла о ваших догадках про DTD.

Цитата:

Сообщение от Riim
Ведь кроме строки
parseFloat(window.opera.version()) < 9.5есть еще строка
B.WebKit && !document.evaluate

Я могу написать кучу строк. Вы по-сути расскажите на что они влияют и почему. Я так и не увидел ответа - почему же всё-таки ваш тултип на странице стоял не на месте. В чём причина?! и что поменялось в опере после версии 9.5?!

Про веб кит... Браузеров существует ООЙ как много и если мы их всех будем учитывать - догадываетесь что тогда будет?! Такие вещи можно смело отбрасывать. Зайдите на лайв интернет и посмотрите процент этого браузера.

Цитата:

Сообщение от Riim
И еще есть таинственный compatMode

Ты мне можешь написать конкретно?! Ты тестил в этом режиме?! Если да - то:

Цитата:

Сообщение от B~Vladi
Если у кого эти ф-ции возвращают неправельный результат - пожалуйста! напишите подробнее об этом! какой браузер, сборка, DTD и при каких условиях это проявляется.

Зачем тратить время на лишние вопросы?!

Цитата:

Сообщение от Riim
На данный момент функции очень далеки от понятия "кроссбраузерные".

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

Цитата:

Сообщение от Riim
Это выше было доказано на конкретном примере.

Пример с (не)совпадением значений свойств не может это доказывать. Главное - что мы получаем на выходе. И условие, описанное про margin и padding нужно совсем не для оперы.

Цитата:

Сообщение от Riim
продолжаешь считать всех глупыми, а себя самым умным

Процетируешь?! Что-то не помниться что я такое писал.

Kolyaj 21.05.2009 11:25

Цитата:

Сообщение от B~Vladi
Зайдите на лайв интернет и посмотрите процент этого браузера.

2.5% по liveinternet.

B~Vladi 21.05.2009 11:27

Цитата:

Сообщение от Kolyaj
2.5% по liveinternet.

Можно ссылку?

Kolyaj 21.05.2009 11:31

Вы не знаете, где находится статистика по браузерам в liveinternet? Думаю, вы просто не знаете, что такое WebKit.

Для справки: WebKit -- движок рендеринга, используемый, в частности, браузерами Safari и Chrome. И всякими другими проектами, типа, AdobeAIR и TitaniumApp, что меня совсем не радует, т.к. движок говеный :)

B~Vladi 21.05.2009 11:34

Я не про WebKit

что касается Safari и Chrome
Chrome 1.7%
Safari 2 0.6%

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

В Chrome ф-ция работает.

B~Vladi 21.05.2009 11:37

Даже Opera Mini имеет больший процент, чем любой из WebKit-браузеров. Может вообще отказаться от JS, т.к. в нём почти ничего не работает?!:wacko:

B~Vladi 21.05.2009 11:44

Я прекрасно понимаю, что возможно многие меня сейчас обвинят.

ИМХО. Писать сайты необходимо под:

1. Mozilla потому что все знают почему.
2. Internet Explorer с 6(пока) по 8. Потому что билли ещё молодой.
3. Opera потому что почему-то он нравиться пользователям и на это нельзы закрывать глаза. Тем более, что амбиций у создателей много.

Браузеры, которые могут, но лучше. чтоб не шли лесом:

1. Chrome - потому что гугл и это груто.
2. Safari - потому что жив Mac.

Браузеры, которые ходят лесом сами, если разработчики из тайги:

Konqueror и
Цитата:

Сообщение от Kolyaj
всякими другими проектами, типа, AdobeAIR и TitaniumApp

+ IE-подобные, написанные на коленке.

Kolyaj 21.05.2009 11:49

Цитата:

Сообщение от B~Vladi
Я хотел получить вашу ссылку для того, чтобы увидеть данные, которые показаны вам.

http://www.liveinternet.ru/stat/ru/b...=browsers.html
Цитата:

сумма выбранных 338,483 2.5%

B~Vladi 21.05.2009 11:52

Kolyaj,

Основной процент - Chrome, в котором
Цитата:

Сообщение от B~Vladi
В Chrome ф-ция работает.

Так что я думаю это не смертельно.
Цитата:

Сообщение от B~Vladi
если мы их всех будем учитывать - догадываетесь что тогда будет?!

Могу разьяснить, если кто незнает.

Riim 21.05.2009 11:55

Цитата:

Сообщение от B~Vladi
Могу разьяснить, если кто незнает.

Разъяснишь это своему будущему заказчику, у которого тетя IE5 использует.

Kolyaj 21.05.2009 11:55

Цитата:

Сообщение от B~Vladi
В Chrome ф-ция работает.

А я сказал, что она где-то не работает? Я ее даже не смотрел :)

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

B~Vladi 21.05.2009 12:02

Riim,
Цитата:

Сообщение от Riim
Разъяснишь это своему будущему заказчику, у которого тетя IE5 использует.

В ие5 ф-ция работает.

Kolyaj,
Цитата:

Сообщение от Kolyaj
А я сказал, что она где-то не работает? Я ее даже не смотрел

Я так... для спарвки.

Цитата:

Сообщение от Kolyaj
Мне вот, например, нужно, чтобы часть моего кода работала абсолютно везде: от телефонов до игровых приставок.

Ну с приставками это беребор:)
Если действительно нужен код, который будет работать везде - пожалуйста, есть куча вариантов которые вы все прекрасно знаете.

Цитата:

Сообщение от B~Vladi
или тем, кто не хочет тащить за каждой страницей десятки киллобайт библиотек и фреймворков

Выбор есть всегда.

Kolyaj 21.05.2009 12:08

Цитата:

Сообщение от B~Vladi
Ну с приставками это беребор

Я же сказал, нельзя так категорично.

Riim 21.05.2009 12:09

Цитата:

Сообщение от B~Vladi
Процетируешь?! Что-то не помниться что я такое писал.

Ты споришь с намеком на мысль: я так думаю, и значит, так оно и есть.

Цитата:

Сообщение от B~Vladi
Пример с (не)совпадением значений свойств не может это доказывать.

А по-моему доказывает. Я так думаю, и значит, так оно и есть.

Цитата:

Сообщение от B~Vladi
Список в студию тех браузеров, для которых должен работать код и он считался кросс-браузерным.

Примерно твой список, плюс Chrome. На IE6 и FF2 можно забить иногда.

Цитата:

Сообщение от B~Vladi
Вперёд. Кто не даёт?!

Цитата:

Сообщение от B~Vladi
Речь шла о ваших догадках про DTD.

Цитата:

Сообщение от B~Vladi
Я могу написать кучу строк. Вы по-сути расскажите на что они влияют и почему. Я так и не увидел ответа - почему же всё-таки ваш тултип на странице стоял не на месте. В чём причина?! и что поменялось в опере после версии 9.5?!

Цитата:

Сообщение от B~Vladi
Ты мне можешь написать конкретно?! Ты тестил в этом режиме?! Если да - то:

Цитата:

Сообщение от B~Vladi
Зачем тратить время на лишние вопросы?!

Ты вот все говоришь, что очень хорошо все тестируешь. А я вот этого не вижу. Если бы это было так, то ты находил бы проблемы с минимальными подсказками. Вместо этого для разъяснения предыдущей проблемы, мне пришлось аж код за тебя написать. Причем простейший.

B~Vladi 21.05.2009 12:12

При всём желании никто не сможет написать код который будет во ВСЕХ существующих браузерах работать правильно. Мы сами продлеваем таким прогам жизнь, поддерживая их. Хотите опять вернуться во времена "Битвы браузеров"?! когда приходилось ставить на что-то одно, потому что для всех невозможно было реализовать некоторые идей. Если мой сайт слетит в каком-нибудь Konqueror-е я только рад буду этому. Это касается как вёрстки так и JS.

И ещё момент. Почему мне навязывают фрейморки и библиотеки?! Я написал код, который работает там где мне надо и весит в 20 раз меньше?! Говоря "там где мне надо" я имею ввиду то, что было описанно несколькими постами выше. И я уверен что этот код потнадобиться многим людям. Сейчас мой нач. отдела плюёт на Safari и Chrome и я не думаю, что это не безосновательно.

B~Vladi 21.05.2009 12:16

Riim...

Я всё протестил. Всё работает на реальных сайтах и в указанных браузерах. Если найдёшь ошибку - пиши если считаешь нужным. Мне не нужны твои
Цитата:

Сообщение от Riim
минимальными подсказками

. ОК?!
Я здесь не ребус разгадываю.

Riim 21.05.2009 12:16

Цитата:

Сообщение от B~Vladi
При всём желании никто не сможет написать код который будет во ВСЕХ существующих браузерах работать правильно.

Про все речь и не шла.

Цитата:

Сообщение от B~Vladi
И ещё момент. Почему мне навязывают фрейморки и библиотеки?!

Кто навязывает?

Riim 21.05.2009 12:18

Цитата:

Сообщение от B~Vladi
Мне не нужны твои

Ладно. Не нужны, так не нужны.

B~Vladi 21.05.2009 12:18

Цитата:

Сообщение от Kolyaj
Я же сказал, нельзя так категорично.

ок:)


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