浏览器检测使用javascript失败刷新

时间:2013-01-09 20:33:02

标签: javascript browser-detection

我正在尝试检测不支持位置的设备:已修复。编辑:我已修复代码,因此它检测功能而不是浏览器/操作系统检测。

我认为当我第一次打字时,我会让人感到困惑。当我刷新页面时,我的问题就出现了。高度计算错误,这是一个我所知道的完全不同的问题,但我仍在寻找帮助。

更新了下面的检测脚本:

    function fixed() {
        var container = document.body;

        if (document.createElement && container && container.appendChild && container.removeChild) {
            var el = document.createElement('div');

            if (!el.getBoundingClientRect) return null;

            el.innerHTML = 'x';
            el.style.cssText = 'position:fixed;top:100px;';
            container.appendChild(el);

            var originalHeight = container.style.height,
                originalScrollTop = container.scrollTop;

            container.style.height = '3000px';
            container.scrollTop = 500;

            var elementTop = el.getBoundingClientRect().top;
            container.style.height = originalHeight;

            var isSupported = (elementTop === 100);
            container.removeChild(el);
            container.scrollTop = originalScrollTop;

            return isSupported;
        }

        return null;
    }


    //TEST FOR MOBILE, SET TOP IMAGE TO RELATIVE
    if(fixed()) {
        image_height = jQuery("#outer_homepage_image").height() - 45;
        jQuery("#content").css("top",image_height);

        jQuery(window).resize(function() {
            image_height = jQuery("#outer_homepage_image").height() - 45;
            alert(image_height);
            jQuery("#content").css("top",image_height);
        });
    } else {
        jQuery("#outer_homepage_image").css("position","relative");
    }

2 个答案:

答案 0 :(得分:4)

这是一个非常脆弱且构思错误的事情。

if(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {

例如,iOS完全支持位置:自iOS 4以来已正确修复。我们现在已经开始使用6.对于Android&黑莓,我不确定,但是会支持"支持"。

您需要测试功能,而不是用户代理。正如我所说,你可能有一个不支持它的iOS设备和另一个支持它的iOS设备。事实上,大多数人都这样做了。

这是一个有用的链接,可引导您选择道德,虔诚的选择:http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED

答案 1 :(得分:0)

感谢所有支持者。我用jQuery(window).load(function(){

)解决了这个问题

它现在有效,因为其他一切都已加载,所以我可以计算出合适的高度。