Android 版 Firefox 中 onload 事件期间 window.innerWidth 的值错误?

2023-12-30

好的,我面临的问题是:我的移动 Firefox 浏览器无法检索正确的值window.innerWidth, document.documentElement.clientWidth,或者甚至是a的宽度div样式设置为在页面加载后占据整个客户端窗口。

我没有疯,我的代码在其他所有浏览器中都运行得很好!由于某种原因,Firefox 使用默认值初始化这些值,然后稍后获取正确的值。如果在任何时候我用以下命令中断我的 JavaScriptalert(),这些属性随后神奇地变得准确。

我在互联网上搜索了答案,我所能找到的只是一种黑客解决方法:使用window.setTimeout延迟使用这些属性,直到它们有时间正确填充。这很疯狂!用户想要的是速度,而不是仅仅为了在 Firefox 浏览器上查看我的网站而造成的额外延迟。

我不明白的是我可以设置一个div在值变得准确之前完美地填充客户端窗口。我在 css 中通过将 div id 的宽度和高度设置为 100% 来实现此目的。document.documentElement基本上是一样的document.getElementById("my_div");当所有文档元素加载完毕后,浏览器如何知道文档元素有多大div应该是当它首先没有正确的客户端窗口尺寸时?

我尝试过在 a 中运行我的代码window.addEventListener("load",function(event_){ //My Code });但这些值仍然不会生成。之后是否有页面加载事件window.onload?

如果有人能告诉我为什么只有 Firefox 移动版似乎会显示这种奇怪的行为,我会给你一个精神上的高五。

下面是一些重现问题的示例代码:

<!DOCTYPE HTML>
<html>
    <head>
        <!-- Added " after javascript during edit. -->
        <script type="text/javascript">
            window.addEventListener("load",function(event_){
                var output=document.getElementById("output");
                /* Returns some default value like 980. */
                output.innerHTML=window.innerWidth;

                alert("After this alert, the value will change.");
                /* Returns an accurate value like 511. */
                output.innerHTML=window.innerWidth;
            });
        </script>
        <!-- Added title during edit. -->
        <title>Title</title>
    </head>
    <body>
        <p id="output">Default Output</p>
    </body>
</html>

我的 Firefox Android 版本是 35.0.1。我的安卓版本是4.4.4。在我的设备上,Firefox 在输出 p 元素中显示“980”,显示警报,然后再次显示“980”。页面刷新后,前两个步骤保持不变,但警报后的输出更改为 360。这种情况发生在document.documentElement.clientWidth以及。我尝试的属性似乎都没有获得正确的值。看来 Firefox 在页面加载后在访问客户端窗口的尺寸之前有某种延迟......

我尝试了没有 JQuery 的 verge.airve.com 插件,它的初始反馈仍然是 980。它在 Chrome 上也初始化为 980,这很奇怪,因为 Chrome 在没有它的情况下按预期工作......

经过一番争论,找到了解决方案! Firefox 显然会在加载后调整窗口大小(我想这是为了更好的衡量标准,谁知道呢)!因此,除了 window.onload 之外,通过添加 resize 事件处理程序,可以避免这个问题!有关更多详细信息,请参阅下面接受的答案。


确保在加载整个文档并调整大小时完成测量。

window.onload = showViewport;
window.onresize = showViewport;

function showViewport() {
  var output=document.getElementById("output");
  var width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
  var height= Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
  output.innerHTML = "Viewport size is " + width + "x" + height;
}
<body>
  <p id="output">Default Output</p>
</body>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 版 Firefox 中 onload 事件期间 window.innerWidth 的值错误? 的相关文章

随机推荐