Определить, если окно имеет полосу прокрутки в IE, используя JavaScript (window.open) - PullRequest
4 голосов
/ 20 февраля 2010

Когда я вызываю window.open, я могу включить список параметров. Одним из таких параметров являются полосы прокрутки, которые можно установить на да или нет .

Когда я помещаю javascript в дочернее окно, javascript должен определить, были ли полосы прокрутки установлены в yes или no при открытии окна. Я хочу знать, имеет ли окно по умолчанию полосы прокрутки или нет.

Меня интересует только это в IE. Как я могу проверить? window.scroolbar не работает в IE.

Как мне это сделать? Чтобы быть совершенно ясным, я не говорю о переполнениях div, я говорю о свойствах полосы прокрутки окна.

редактирование:
- Я в IE, поэтому window.scrollbars / this.scrollbars ничего не выдаст
- Окна прокрутки существуют вне тела.
- Глядя на ширину документа расскажет мне о документе. Я даже могу выяснить, есть ли полосы прокрутки в документе. Это ничего не скажет мне о самом окне.
- Ширина полосы прокрутки окна изменяется в зависимости от выбранной в настоящее время темы рабочего стола Windows по аскетическим причинам.

Ответы [ 5 ]

8 голосов
/ 26 февраля 2010

Рядом с вашим сценарием, который открывает дочернее окно (тот, в котором вы устанавливаете полосы прокрутки = да или нет), добавьте переменную уровня окна, которая равна true, если scrollbars = да, или false, если нет.

Затем в скрипте вашего дочернего окна вы найдете значение, которое было установлено из self.opener.myWindowLevelVariable.

Вы также можете указать пространство имен переменной.Важной частью является self.opener или window.opener, если вы предпочитаете.

Обновление:

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

Родитель:

var scrollwindow = window.open("file.htm", "anotherwindow", "width=400,height=250,scrollbars=no");
scrollwindow.hasScrollbars = false;

Ребенок:

alert(hasScrollbars);

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

Ребенок:

try {
    // do something with hasScrollbars
    // If it isn't true or false, ie undefined, using it will throw you into the catch.
    alert(hasScrollbar);
} catch (e) {
    // scrollbars weren't explicitly added or forbidden, so they'll automatically
    // show up if the content is larger than the window. In this case, use a
    // scrollbar sniffing technique.
    var hasVerticalScrollbar = document.body.scrollHeight > document.body.clientHeight;
    var hasHorizontalScrollbar = document.body.scrollWidth > document.body.clientWidth;
}

Обнаружение полосы прокрутки: Я думаю, это то, к чему стремился Стефано.Он был на правильном пути.Но используйте clientWidth, scrollWidth, clientHeight и scrollHeight в комбинации.Из режима quirks :

Если элемент не имеет полос прокрутки, scrollWidth / Height должен быть равен clientWidth / Height.

Когда элемент не имеет полос прокрутки, которые IE создаетвысота scrollHeight равна фактической высоте содержимого;а не высота элемента. scrollWidth является правильным, за исключением IE8, где он отключен на 5 пикселей.

Итак, вам придется немного отрегулировать часть перехвата полосы прокрутки для IE, но это основнойидея.

3 голосов
/ 27 февраля 2010

Вы можете определить, имеет ли окно видимую полосу прокрутки в IE, используя этот маленький трюк JavaScript:

//You'll have to modify this so as not to do it unless your user is running IE
window.attachEvent('onload', getChrome);

function getChrome() {
    //read the window width and height
    var w = document.documentElement.clientWidth;
    var h = document.documentElement.clientHeight;

    //set the window to that size
    window.resizeTo(w, h);

    //read the window width and height again
    var newW = document.documentElement.clientWidth;
    var newH = document.documentElement.clientHeight;

    //calculate the difference
    var diffX = w - newW;
    var diffY = h - newH;

    //set the window back to what it was
    window.resizeBy(diffX, diffY);

    alert('diffX: ' + diffX + '\ndiffY: ' + diffY);

    //If diffX is larger than 10 (in Vista and Windows 7, the borders are 5px each)
    //then you're scrollbar is visible.
}
1 голос
/ 20 февраля 2010

Это немного странно, но, похоже, работает:

function has_scrollbar() { 
    if (document.documentElement.clientHeight < document.body.offsetHeight) {
        alert("vertical scrollbar");
    } else {
        alert("no vertical scrollbar");
    }
}

Вы проверяете размер offsetHeight (html-содержимое) и сравниваете его с documentElement.clientHeight (высота окна для IE).Вы можете переключить «width» для «height», очевидно.

Надеюсь, это поможет!

0 голосов
/ 01 марта 2010

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

Однако, поскольку IE будет всегда отображать полосы прокрутки (даже если вам нечего прокручивать), вы можете установить overvlow:auto для тега body.

0 голосов
/ 20 февраля 2010

Попробуйте это

scrollwindow = window.open("file.htm", "anotherwindow", "width=400,height=250");
  if (scrollwindow.scrollbars) 
  {
alert("Yes we have  scrollbars");
  }
 else 
{
    alert("Sorry doesnt support scrollbars");
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...