Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.11.2010, 01:41
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

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

Первый случай, мне нужно померить ширину стандартного скролла браузера (в разных ОС и браузерах эта величина разная!).
var scrW = = (OS.isLinux)? 15: 17; //хак как раз для хрома
var div = document.createElement('div');
    div.setAttribute('style', 'position:absolute; top:-20px; left: -20px; overflow:scroll; background:white');
    document.body.appendChild(div);

    if (div.offsetWidth > 9 && div.offsetWidth < 50) //хак для хрома и старых версий ие
        scrW  = div.offsetWidth;


Как мы видим, у дива используется overflow:scroll, однако див в Хроме создается без скролла.


Второй случай с iframe'ом
У ифрейма есть атрибут scrolling="YES"
Однако если загружаемая страница полностью помещается в iframe, Хром не отображает скролл, несмотря на указанный атрибут.



Кто-нибудь сталкивался с подобными проблемами? Если да, то как решали? Если нет, то какие есть соображения?

Последний раз редактировалось Snipe, 26.11.2010 в 01:46.
Ответить с цитированием
  #2 (permalink)  
Старый 26.11.2010, 13:06
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Не совсем понятно зачем Вам обязательное присутствие скроллера (даже когда он не нужен), но подозреваю, что для однозначного определения размеров внутренней межскрольной области, поэтому:

Сообщение от Snipe Посмотреть сообщение
Как мы видим, у дива используется overflow:scroll, однако див в Хроме создается без скролла.
Некоторые броузеры в некоторых случаях не отображают графический элемент (например, DIV) если в нём нет никакого текста, или отсутствует заданный цвет фона. То есть, надо в него вставить хотя бы 1 пробел. Причём не обычный, а "неразрывный" - это &nbsp; или в UTF-8 код 0A.
Иногда, чтобы быть железно уверенным, что ничто не подпортит результат я ставлю стиль font-size:0px

И не делайте div.setAttribute('style', '...') - в IE с этим проблемы
делайте div.style.cssText = '...'
Сообщение от Snipe Посмотреть сообщение
У ифрейма есть атрибут scrolling="YES"
Однако если загружаемая страница полностью помещается в iframe, Хром не отображает скролл, несмотря на указанный атрибут.
первый вариант:
убираете в фрейме скроллер, вставляете в фрейм DIV со скроллерами, а в этот DIV свою информацию.
<iframe scrolling="NO" src="..." ></iframe>
 
<div style="width:100%; height:100%; overflow:scroll">
данные фрейма...
</div>


второй вариант:
ставите в тело фрейма абсолютно позиционированный DIV с размерами, превышающими на 1 px размеры фрейма.
<iframe scrolling="YES" src="..." style="width:100px; height:100px"></iframe>
 
 
<div style="position:absolute; width:101px;  height:101px">&nbsp;</div>


Возможно, Вам также потребуется обнулить во фрейме margin и border.

Последний раз редактировалось Маэстро, 26.11.2010 в 13:09.
Ответить с цитированием
  #3 (permalink)  
Старый 26.11.2010, 14:52
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от Маэстро Посмотреть сообщение
Некоторые броузеры в некоторых случаях не отображают графический элемент (например, DIV) если в нём нет никакого текста, или отсутствует заданный цвет фона. То есть, надо в него вставить хотя бы 1 пробел. Причём не обычный, а "неразрывный" - это &nbsp; или в UTF-8 код 0A.
Иногда, чтобы быть железно уверенным, что ничто не подпортит результат я ставлю стиль font-size:0px

И не делайте div.setAttribute('style', '...') - в IE с этим проблемы
делайте div.style.cssText = '...'
Сделал:
scrW = (panel.OS.isLinux)? 15: 17;
    var div = document.createElement('div');
    div.innerHTML = '&nbsp;'
    var styles = 'position:absolute; top:-20px; left: -20px; overflow:scroll; background:white;font-size:0';
    if (isIE)
        div.style.cssText = styles;
    else
        div.setAttribute('style', styles);
    document.body.appendChild(div);
    alert(div.offsetWidth+' - '+scrW );
    if (div.offsetWidth > 9)
       scrW  = div.offsetWidth;

Теперь вместо "0" Хром пишет "1". =\
Ну и старые версии IE вместо четырехзначного числа пишут 1.

Цитата:
первый вариант:
убираете в фрейме скроллер, вставляете в фрейм DIV со скроллерами, а в этот DIV свою информацию.

второй вариант:
ставите в тело фрейма абсолютно позиционированный DIV с размерами, превышающими на 1 px размеры фрейма.

Возможно, Вам также потребуется обнулить во фрейме margin и border.
Не имею доступа к ифрейму.
Ответить с цитированием
  #4 (permalink)  
Старый 26.11.2010, 15:42
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Snipe Посмотреть сообщение
мне нужно померить ширину стандартного скролла браузера
Вы так и не сказали, для чего нужно мерять ширину скрола.
Если это нужно, чтобы потом вычислить ширину внутренней области, то есть такой способ:
вставляете DIV
<div id="widthtest" style="width:100%">&nbsp;</div>

затем меряете его ширину:
alert(document.getElementById('widthtest').offsetWidth);

-эта ширина и будет шириной внутренней области, и будет меняться в зависимости от того есть скроллер, или нет.
Но если уж очень надо знать ширину скроллера, то потом можете из ширины родителя этого DIV_a (window,body,...) вычесть offsetWidth этого DIV_a.
Ответить с цитированием
  #5 (permalink)  
Старый 26.11.2010, 16:08
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

у меня над ифреймом рисуется плашка, которая не должна заезжать на скролл, но должна быть впритык к нему.
Задачу по вычислению ширины скролла уже решил. Просто создал в html див с текстом у которого померил ширину скролла. Не красиво, зато работает.

А вот задача со скроллом в ифрейме пока под вопросом.
Ответить с цитированием
  #6 (permalink)  
Старый 26.11.2010, 16:31
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Snipe Посмотреть сообщение
у меня над ифреймом рисуется плашка, которая не должна заезжать на скролл, но должна быть впритык к нему
это надо видеть... )
p.s. что такое плашка?
Ответить с цитированием
  #7 (permalink)  
Старый 26.11.2010, 16:48
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от Маэстро Посмотреть сообщение
это надо видеть... )
p.s. что такое плашка?
Ну панелька, див, как угодно. Как доделаю, покажу - все поймете. )
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск