Событие загрузки jQuery в Chrome возвращает нулевые значения ширины / высоты во всплывающем окне. - PullRequest
2 голосов
/ 09 ноября 2011

При создании всплывающего окна с главной страницы с помощью window.open дочерняя / всплывающая страница использует событие onload, которое должно отображать его ширину / высоту. Однако в Chrome это всегда приводит к 0. Проверка ширины / высоты окна и документа (с или без jQuery) вернет только 0. Как ни странно, загрузка дочерней страницы на вкладке сама по себе всегда правильно сообщает ширину / высоту.

Это правильное поведение? Что-то не так с событием загрузки? С хромом? Есть ли другое событие, которое я могу ждать, чтобы убедиться, что свойства ширины / высоты, в частности, установлены?

Если в onload установлен тайм-аут, вы, вероятно, получите правильные значения. Но, похоже, это просто игра в догадки о том, как долго ждать, прежде чем проверять ширину / высоту. Неужели нет способа ждать определенного события, чтобы точно знал , что ширина / высота дочернего окна установлена ​​в Chrome?

Быстрая демонстрация ниже с обеими страницами. Надеясь, что у кого-то может быть какое-то решение, которое не предполагает угадывание неопределенного количества времени для установки в setTimeout.

Редактировать : Забыл упомянуть, я проверял это на версиях Chrome 14 / 15.

main.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <title>main</title>
    </head>
    <body>
        <input type="button" value="Pop" onclick="window.open('http://localhost:8085/social_test/test.html', 'namedWnd', 'width=320,height=240')" />
    </body>
</html>

test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <title>test</title>
        <script type="text/javascript" src="jquery-1.6.4.js"></script>
        <script type="text/javascript">
            $(window).load(function(){
                var report = function() {
                    alert($(window).width() + " x " + $(window).height());
                };
                report();
                //window.setTimeout(report, 1000);
            });
            // without any jquery
            /*window.onload = function() {
                var report = function() {
                    alert(window.innerWidth + " x " + window.innerHeight);
                    // or document's size
                    //alert(window.document.documentElement.clientWidth
                    //  + " x " + window.document.documentElement.clientHeight);
                };
                report();
                //window.setTimeout(report, 1000);
            };*/
        </script>
    </head>
    <body/>
</html>

Ответы [ 3 ]

1 голос
/ 05 ноября 2012

Не всегда правильно использовать $(document) вместо $(window)

Решение: Каждый, у кого есть (такие) проблемы с jQuery, должен быть непосредственно направлен на повторную проверку, действительно ли DTD указывает на следующее DTD http://www.w3.org/TR/html4/loose.dtd

Ссылка: http://bugs.jquery.com/ticket/12426

1 голос
/ 09 ноября 2011

почему бы вам не использовать $ (document) вместо $ (window): http://api.jquery.com/height/

Я использовал его в поп-приложении для себя, и он работает, без таймаута или чего-либо еще

0 голосов
/ 09 ноября 2011

Попробуйте:

$(document).load(function(){
    function report() {
        alert($(window).width() + " x " + $(window).height());
    };
    report();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...