好的,我面临的问题是:我的移动 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 事件处理程序,可以避免这个问题!有关更多详细信息,请参阅下面接受的答案。