Javascript 什么';我的Galaxy S3上有个砰砰作响的window.page?
某些浏览器是否使用Javascript 什么';我的Galaxy S3上有个砰砰作响的window.page?,javascript,android,html,Javascript,Android,Html,某些浏览器是否使用window.page来显示某些内容 我这样问是因为我的网络应用程序在运行安卓4.3的Galaxy S3手机上神秘地失败了。调查显示有什么东西用HTMLBodyElement撞击了我的全局变量page。它在我的Android 4.3虚拟机上运行得很好。这是一个POC: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <script type="t
window.page
来显示某些内容
我这样问是因为我的网络应用程序在运行安卓4.3的Galaxy S3手机上神秘地失败了。调查显示有什么东西用HTMLBodyElement
撞击了我的全局变量page
。它在我的Android 4.3虚拟机上运行得很好。这是一个POC:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<script type="text/javascript">
window.page = 0;
window.addEventListener("load", start, false);
function start()
{
if (isNaN(window.page))
alert(window.page);
setTimeout(function(){alert(window.page);}, 5000);
}
</script>
</head>
<body>
<table>
<tr>
<td>This is some text that is long enough to wrap around.</td>
<td>This is some text that is long enough to wrap around.</td>
<td>This is some text that is long enough to wrap around.</td>
</tr>
</table>
</body>
</html>
window.page=0;
window.addEventListener(“加载”,开始,错误);
函数start()
{
if(isNaN(window.page))
警报(window.page);
setTimeout(函数(){alert(window.page);},5000);
}
这是一些足够长的文本,可以环绕。
这是一些足够长的文本,可以环绕。
这是一些足够长的文本,可以环绕。
预期行为:5秒内出现一个消息框,显示0
(分配给window.page的值)
观察到的行为:5秒内出现一个消息框
[object HTMLBodyElement]
它似乎只在一些非常特殊的情况下重现;例如,如果表格单元格中的文本没有环绕,window.page
保持为0
。正如我所说,我只在我的三星Galaxy S3上见过这种情况;我在我的Android 4.2平板电脑或Firefox、Chrome或IE桌面上没有发现任何问题
我只需重命名
页面
即可解决此问题。但我想知道这里发生了什么,以及我的其他全局变量是否会被踩到。正如RoToRa在评论中指出的,可能有特定于浏览器的全局变量或加载项会干扰您的脚本。最好避免使用它们。但是,如果您想查看手机浏览器中具体发生的情况,请使用此选项列出“窗口”对象的按键:
<script type="text/javascript">
keyList = Object.keys(window);
for(var i in keyList) {
document.write(keyList [i]+"<br>");
}
</script>
keyList=Object.keys(窗口);
对于(键列表中的变量i){
文件。写入(键列表[i]+“
”;
}
只是一个一般性建议:首先避免使用所有全局变量。这将防止任何与第三方脚本和浏览器特定全局变量冲突的副作用。我似乎也有同样的问题。它看起来像是在设定间隔或onResize@RoToRa您至少需要一个全局变量,对吗?用作所有其他内容的命名空间。嗯,我使用了'page'作为根变量:)@DirkBoer您至少应该使用一个不太通用的变量名,例如dirkBoerPage
。在最初的问题中,根本不需要全局变量——我可以断言,不使用任何全局变量就可以编写JavaScript。