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

B~Vladi 21.05.2009 12:19

Цитата:

Сообщение от Riim (Сообщение 19673)
Про все речь и не шла.


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

Это не про Вас. Это общее мнение.

Riim 21.05.2009 12:23

Цитата:

Сообщение от B~Vladi
Это не про Вас. Это общее мнение.

А, да, это есть. Навязывают гады.

Kolyaj 21.05.2009 12:29

Цитата:

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

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

B~Vladi 21.05.2009 12:40

Цитата:

Сообщение от Kolyaj
Поддерживая их, вы увеличиваете свою аудиторию.

По мне 0.5% это не есть аудитория.

Цитата:

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

Соглашусь.
Даю 99% что этим васей окажется человек, у которого уже стоит пачка браузеров. Это вполне логично.

Kolyaj 21.05.2009 13:03

Цитата:

Сообщение от B~Vladi
По мне 0.5% это не есть аудитория.

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

Цитата:

Сообщение от B~Vladi
Даю 99% что этим васей окажется человек, у которого уже стоит пачка браузеров.

Если человек пользуется IE6, на который чаще всего нападают те, кто не умеет под него верстать/писать скрипты, то, скорее всего, у него не стоит больше никаких браузеров.

B~Vladi 21.05.2009 13:16

Цитата:

Сообщение от Kolyaj
Если человек пользуется IE6, на который чаще всего нападают те, кто не умеет под него верстать/писать скрипты, то, скорее всего, у него не стоит больше никаких браузеров.

Мои ф-ции написанны именно под те браузеры, которые действительно составляют основной процент пользователей. Что касается вёрстки/скриптов под IE - у меня никогда с ним не возникало нерешаемых проблем. В примере про васю (я так думаю) подразумевалось что речь идёт не о популярном браузере, а о каком-нить экзотическом. И моё мнение про 99% верно только в этом случае. На всякий...

B~Vladi 21.05.2009 13:21

Если вы считаете, что мои ф-ции нерабочие и только навредят - я без проблем всё затру...

Kolyaj 21.05.2009 13:36

B~Vladi,
вы местами теряете нить обсуждения. На что я отвечаю, у меня процитировано.

B~Vladi 21.05.2009 13:39

Цитата:

Сообщение от Kolyaj
вы местами теряете нить обсуждения. На что я отвечаю, у меня процитировано.

Да я не про ваши посты... Я прекрасно понимаю о чём кто что пишет. Просто сложилось такое впечатление...

B~Vladi 21.05.2009 13:42

Суть топика уже давно потеряна. Проще всего слить ссылки на фрейморки/библиотеки и все будут довольны.

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"

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

x-yuri 23.05.2009 20:40

Цитата:

Есть еще standards mode? Я встречался с тремя вариантами
я имел в виду Standards-compliant mode или Strict mode, т.е. CSS1Compat

e1f 24.05.2009 04:58

Zeroglif, Все так, как и должно быть, вот только это, выходит, работает не совсем так, как надо:
var $ = function(elem/* id */) {
    return typeof elem == 'string' ? $d.getElementById(elem) : elem;
};

Видимо, нужно использовать что-то вроде
(elem!=null) && elem.constructor==String

Zeroglif 24.05.2009 11:10

Цитата:

Сообщение от e1f
работает не совсем так, как надо

Зачем передавать в эту функцию объект "подтипа" String?

e1f 24.05.2009 11:55

Затем, что это строка. У нее есть все методы, которые есть у строки

Zeroglif 24.05.2009 14:21

Цитата:

Сообщение от e1f
Затем, что это строка. У нее есть все методы, которые есть у строки

Это не строка, а объект (тип Object, "объектный подтип" String). Различайте примитивные значения от объекта. У первых нет методов пока не произойдёт конвертация из типа в тип. Зачем вместо строки отправлять в функцию объект - непонятно.

e1f 24.05.2009 16:21

"test".substr(1)

Методы есть. Или они все-же появлись после приведения типа? Я к тому, что в функцию можно передать строку и так:
function some_func(str){}
...
some_func(String(var1))

Zeroglif 24.05.2009 16:42

Цитата:

Сообщение от e1f
"test".substr(1)

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

Сообщение от e1f
some_func(String(var1))

Есть разница между 'String()' и 'new String()', первое - это вызов функции и конвертация в строку, второе - это вызов конструктора и создание объекта. Оператор 'typeof' будет работать как должен:
var s = 'text';
alert( [ typeof ( s ), typeof String( s ), typeof ( new String( s ) ) ] ); // string,string,object

x-yuri 24.05.2009 23:03

Zeroglif, ты лучше скажи как размеры клиентской области определеить ;)

Riim 27.05.2009 09:44

Что-то B~Vladi на сайте появляться перестал :( . Расстроился наверно сильно. Я тут перечитал все и сам себя не узнал. Прям как с цепи сорвался, подумаешь пара мелких недочетов. На эмоциях немного получилось.
B~Vladi, если будешь читать, то извини если что не так. Нормальные у тебя функции. И те, что тип определяют, тоже имеют право быть. Я иногда в разных фреймворках встречаю такие.
Небольшой совет:
В следующий раз, когда будешь предлагать что-то подобное, вместо:
Цитата:

Вот такие у меня супер-мега-функции. Они самые лучшие и все ими должны срочно пользоваться.
напиши лучше:
Цитата:

Вот такими функциями пользуюсь для себя. Может кому-то будут полезны. Пишите если в них что-то не так.
Т. е. нужно не навязывать, а просто предлагать. Тогда, такие странные люди как я, не будут придираться к мелочам.

B~Vladi 27.05.2009 09:56

OK, Riim, учту...

JSprog 31.08.2009 13:00

Цитата:

Сообщение от B~Vladi
Использует ф-цию xDef().

там xNum()

Что-то я не понял тут id писать?
function xTop(e,y){
if(xNum(y)) e.style.top=y+'px';
return e.offsetTop;
}

B~Vladi 31.08.2009 13:12

Цитата:

Сообщение от JSprog
там xNum()

Ну может и ошибся, чего придирацо если всё понятно:)

Цитата:

Сообщение от JSprog
Что-то я не понял тут id писать?

Нет, ссылку на DOM-узел.

JSprog 31.08.2009 13:15

Цитата:

Сообщение от B~Vladi
Нет, ссылку на DOM-узел.

приведи пример

B~Vladi 31.08.2009 13:22

Такой чтоли?!
xTop(document.getElementById('id'),100);

JSprog 31.08.2009 13:24

Да=) спс
а то я думал ты о другом говоришь

B~Vladi 31.08.2009 13:26

Цитата:

Сообщение от JSprog
а то я думал ты о другом говоришь

Ну ок. На самом деле xTop и xLeft использовать не рекомендуется, т.к. это совсем не нужный и лишний вызов функции. То же самое и про xDef, xNum, xStr.

B~Vladi 31.08.2009 13:41

Немного подредактировал:)

Riim 31.08.2009 13:50

"x" в именах что-то значит?

JSprog 31.08.2009 14:01

Только не устанавливает он значение
пишу я
xTop(document.getElementById('la'),14);
но не 14 а 8 почему-то

B~Vladi 31.08.2009 14:03

Цитата:

Сообщение от Riim
"x" в именах что-то значит?

Для удобства. Раньше я таким ф-циям ставил префикс x, чтобы различать для чего они. А ещё раньше была кроссбраузерная библиотека X, когда с этим было всё совсем плохо и они использовали тот же префикс:)


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