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

Riim 20.05.2009 14:54

Цитата:

Сообщение от B~Vladi
если у Вас есть что-то конкретное - говорите...

prototype.1.6.1_rc2.js
str 3093

document.viewport = {

  getDimensions: function() {
    return { width: this.getWidth(), height: this.getHeight() };
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop);
  }
};

(function(viewport) {
  var B = Prototype.Browser, doc = document, element, property = {};

  function getRootElement() {
    if (B.WebKit && !doc.evaluate)
      return document;

    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
      return document.body;

    return document.documentElement;
  }

  function define(D) {
    if (!element) element = getRootElement();

    property[D] = 'client' + D;

    viewport['get' + D] = function() { return element[property[D]] };
    return viewport['get' + D]();
  }

  viewport.getWidth  = define.curry('Width');

  viewport.getHeight = define.curry('Height');
})(document.viewport);


Единственный минус: не учитывается compatMode. Но это сейчас уже не столь актуально.

B~Vladi 20.05.2009 15:09

Очень хрупко...

window.parseFloat(window.opera.version()) < 9.5


Не стал бы таким пользоваться...

B~Vladi 20.05.2009 15:10

prototype.1.6.1_rc2.js
не до конца понятно для чего этот код.

Riim 20.05.2009 15:15

Цитата:

Сообщение от B~Vladi
Очень хрупко...

У вас предвзятое мнение. Хрупко как раз у вас.

B~Vladi 20.05.2009 15:20

Цитата:

Сообщение от Riim (Сообщение 19525)
У вас предвзятое мнение. Хрупко как раз у вас.

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

B~Vladi 20.05.2009 15:24

ИМХО

писать такие вещи нада так, что бы в конце всех условий была такая контрукция, которая описана в доках W3C.

Riim 20.05.2009 15:33

Цитата:

Сообщение от B~Vladi
А именно о том, что почти во всех библиотеках и фреймворках есть проверка версии или типа браузера и не её основе строят логику. Это не есть гуд.

Мнение в некотором смысле верное, но и меру нужно знать. В Opera9.5+ верное значение перенесли в documentElement.clientHeight. Как вы это хотите определить с помощью:
Цитата:

Сообщение от B~Vladi
Вместо этого идёт проверка соответствующих своиств или методов

?

Факт остается фактом: пока ваш вариант некроссбраузерен. Вариант из PrototypeJs, по-вашему, плох, но он работает верно. Когда напишете вашим способом кроссбраузерный вариант, тогда и поговорим.

Riim 20.05.2009 15:35

Цитата:

Сообщение от B~Vladi
писать такие вещи нада так, что бы в конце всех условий была такая контрукция, которая описана в доках W3C.

К этому нужно стремиться, но при всем желании это не всегда возможно.

B~Vladi 20.05.2009 15:42

Цитата:

Сообщение от Riim (Сообщение 19531)
documentElement.clientHeight.

А в чём, собственно, проблема?! Пусть переносят...

Цитата:

Сообщение от Riim (Сообщение 19531)
Факт остается фактом: пока ваш вариант некроссбраузерен. Вариант из PrototypeJs, по-вашему, плох, но он работает верно. Когда напишете вашим способом кроссбраузерный вариант, тогда и поговорим.

Мой вариант кроссбраузен для тех, которые я описал (IE, FF, Opera всех актуальных версий) и я сомневаюсь, что в Safari или Chrome что-то не сработает. Зачем так утверждать?! Лучше напишите ту ф-цию, которая не работает в заявленных браузерах.

Никто не говорил, что вариант из prototype плох.

Какой способ мне написать?! аналог их объекта?!

Riim 20.05.2009 15:57

Цитата:

Сообщение от B~Vladi
А в чём, собственно, проблема?! Пусть переносят...

Давно уже перенесли. И в вашем скрипте это не учитывается.

Цитата:

Сообщение от B~Vladi
Мой вариант кроссбраузен для тех, которые я описал (IE, FF, Opera всех актуальных версий)

Это вы так думаете. Простейший пример: уберите DOCTYPE из документа или поставьте любой старый. Ну как, правильно работает?

Цитата:

Сообщение от B~Vladi
и я сомневаюсь, что в Safari или Chrome что-то не сработает.

Как же вы можете утверждать, что функции кроссбраузерены, если вы их даже толком не тестируете.

----

Вы слышите только себя и ваше мнение всегда самое правильное? Обсуждение теряет смысл.


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