javascript - Safari 在缩小窗口时将一个奇怪的对象插入到 DOM 中,这会扰乱 jQuery 的 position() 结果

标签 javascript jquery html browser safari

在开发更复杂的脚本时,我在 Safari 中遇到了一个相当奇怪的问题。如果重要的话,我使用 5.0.5 Win。当浏览器窗口调整大小以重新定位 position:fixed 元素时,我依赖于 jQuery 的 position().left。根据窗口是否被放大或缩小,我得到了不同的 position().left 结果,因为 Safari 在那个时刻(并且只在那个时刻)渲染了一些奇怪的元素。

我写了一个展示问题的演示页面。

Demo page screenshot

在窗口模式下的 Safari 中加载下面的源代码并稍微缩小窗口。警报会使事情卡住,这样您就会在文档的左上角看到困扰我的奇怪元素。

那到底是什么东西,它来自哪里,我该如何绕过它?

谢谢。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  <head>
    <style type="text/css">
    #test{
        width:500px;
        height:2000px;
        margin: 0 auto;
    }
    </style>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>
    <script type="text/javascript">
    // <![CDATA[
        function resizeWindow( e ) {
            alert($('#test2').position().left);
        };
        $(window).bind("resize", resizeWindow);
    // ]]>
    </script>
  </head>
  <body>
  <div id="test"><div id="test2">Something
  </div></div>
</body></html>

最佳答案

我想出了该怎么做才能停止:通过 css 将 body 的宽度明确设置为 100% 就可以了。奇怪的元素是什么,为什么一开始就没有这个元素被注入(inject),但我仍然不知道。

body {
    width:100%;
}

这个解决方案不可避免地增加了一个水平滚动条。所以我加了一个类

body.safariFix
{
    width:100%;
}

并在获取我需要的值之前通过 JS 分配它,然后我再次将其删除。

if ($.browser.webkit) $('body').addClass('safariFix');
    ...
if ($.browser.webkit) $('body').removeClass('safariFix');

添加了浏览器检测部分,因为这样做会导致 MSIE 中的无限循环。毕竟这是在调整大小事件处理程序中,删除/添加类让 MSIE 触发调整大小事件。 我没有使用特征检测,因为我不知道要检测哪个特征来发现这一点。检测到奇怪的显示对象会很好,但我没有进一步研究。

关于javascript - Safari 在缩小窗口时将一个奇怪的对象插入到 DOM 中,这会扰乱 jQuery 的 position() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162801/

相关文章:

Javascript 字符串匹配

javascript - 将 jQuery UI Timepicker 插件与 React 结合使用

javascript - 使用 Meteor 中的 Javascript 事件在多个预设字段之间切换 MongoDB 文档

html - 覆盖组件中的 rem

html - 对齐按钮内的文本和图像

javascript - 定位聊天栏 (JavaScript)

javascript - 在 JavaScript 中使用 Array.forEach 进行迭代

javascript - 使用 Webpack 时无法将 CSS 链接到 JSX

javascript - Universal Analytics 中用于设置自定义维度的操作顺序

javascript - jQuery 追加不起作用(将 css 添加到头部)