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

Kolyaj 21.05.2009 14:13

Цитата:

Сообщение от B~Vladi
Да я не про ваши посты

А зачем цитировать тогда?

B~Vladi 21.05.2009 14:25

Это не относилось к цитате.

У вас есть что-нибудь по существу топика?!

x-yuri 23.05.2009 04:50

Riim, а во всех фреймворках есть эти
parseFloat(window.opera.version()) < 9.5

и
B.WebKit && !document.evaluate

?

Riim 23.05.2009 05:22

Цитата:

Сообщение от x-yuri
а во всех фреймворках есть эти

Нет, конечно. Многие с момента появления Opera9.5 еще ни разу не обновлялись. Для меня важно то, что я сначала сам пришел к определенному варианту, в котором каждая строчка была обоснована конкретными ситуациями, в которых она что-то исправляла, а затем в PrototypeJs нашел практически идентичный вариант. Если два человека, независимо друг от друга приходят к практически идентичным вариантам, то это я думаю, о чем-то говорит.
Про WebKit много где встречал.

x-yuri 23.05.2009 06:57

12.06.2008 - Opera 9.50
jquery-1.3.2 (2009-02-19):
// :4354
document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
			document.body[ "client" + name ]

mootools-1.2.2:
// :2395
	getSize: function(){
		if (Browser.Engine.presto || Browser.Engine.webkit) {
			var win = this.getWindow();
			return {x: win.innerWidth, y: win.innerHeight};
		}
		var doc = getCompatElement(this);
		return {x: doc.clientWidth, y: doc.clientHeight};
	}
// :2449
function getCompatElement(element){
	var doc = element.getDocument();
	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
};

YUI-2.7.0:
// /dom/dom.js:919
        getViewportHeight: function() {
            var height = self.innerHeight, // Safari, Opera
                mode = document[COMPAT_MODE];
        
            if ( (mode || isIE) && !isOpera ) { // IE, Gecko
                height = (mode == CSS1_COMPAT) ?
                        documentElement.clientHeight : // Standards
                        document.body.clientHeight; // Quirks
            }
        
            return height;
        },

для начала, пожалуй хватит

Riim 23.05.2009 07:34

И что? Я же говорю:
Цитата:

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

В MooTools и в YUI для оперы просто используется innerWidth/innerHeight. Моя практика говорит мне, что этими свойствами нужно пользоваться в самых крайних случаях. В PrototypeJs тоже для оперы что-то выдумывают.
Только в Jquery все идеально само работает. Как и у B~Vladi.

x-yuri 23.05.2009 08:14

так какой вариант правильный? innerWidth vs определение версии браузера? !doc.compatMode может означать standards mode? document.documentElement vs document.getElementsByTagName('html')[0]? B.WebKit && !doc.evaluate vs innerWidth?

Riim 23.05.2009 08:25

Цитата:

Сообщение от x-yuri
innerWidth vs определение версии браузера?

В данном случае мне больше нравится определять версию браузера. Слишком уж часто innerWidth/innerHeight меня обламывал.

Цитата:

Сообщение от x-yuri
!doc.compatMode может означать standards mode?

Есть еще standards mode? Я встречался с тремя вариантами:
1. compatMode == 'CSS1Compat'
2. compatMode == 'BackCompat'
3. compatMode == undefined

Цитата:

Сообщение от x-yuri
document.documentElement vs document.getElementsByTagName('html')[0]?

Слышал, что documentElement может ссылаться на body, но сам вроде не сталкивался.

Цитата:

Сообщение от x-yuri
B.WebKit && !doc.evaluate vs innerWidth?

Это как они так сравниваются?

e1f 23.05.2009 17:45

Цитата:

Зачем? typeof сам по себе нормален
А typeof-то как раз не очень типы проверяет...
var a='test';
console.log(typeof a); // "string"
a = new String('test'); 
console.log(typeof a); // "object"

Zeroglif 23.05.2009 18:44

Цитата:

Сообщение от e1f
var a='test'; console.log(typeof a); // "string" a = new String('test'); console.log(typeof a); // "object"

И что не так, как должно быть?


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