我的页面顶部有这个脚本
<script type = "text/javascript">
if(typeof window.orientation !== 'undefined'){ var ortvalue = "defined"; }
if(ortvalue != "defined") {
document.location.replace("http://www.redirect-here.com");
}
else {
}
</script>
所有脚本都检查用户是否在计算机上,而不是移动设备。如果用户在计算机上,则脚本将重定向到其他站点。该脚本工作正常,但有时页面会在重定向发生之前加载并显示片刻。这是一个小细微差别,但我希望有一种方法可以防止页面在重定向时显示任何内容。
答案 0 :(得分:1)
重定向需要一些时间来解析地址(如果未缓存),获取内容并在页面中显示。这是异步发生的。
如果您可以将此脚本移到body标签下方,那么您可以在location.replace
发生之前隐藏文档正文。
<body>
<script>
var ortvalue;
if(typeof window.orientation !== 'undefined') {
var ortvalue = "defined";
}
if(ortvalue !== "defined") {
document.body.style.display = 'none';
document.location.replace("http://www.redirect-here.com");
}
</script>
你说“脚本工作正常”,所以我不会改变它,但可能有些方法可能会在新设备和新设备上失败。以下是检测移动浏览器的其他方法的建议:Detecting a mobile browser
答案 1 :(得分:0)
请关注hide
文档,执行visibility:hidden
,然后删除样式标记(如果是手机)或仅重定向(如果不是移动设备):
document.write( '<style class="hidedocument" ' +
'type="text/css">body {visibility:hidden;}<\/style>');
<script type = "text/javascript">
if(typeof window.orientation !== 'undefined'){ var ortvalue = "defined"; }
if(ortvalue != "defined") {
document.location.replace("http://www.redirect-here.com");
}
else {
var tempCheck;
var allStyles = document.getElementsByTagName('style');
var i = allStyles.length;
while (i >-1) {
tempCheck = styles[i];
if (tempCheck.className == 'hidedocument') {
tempCheck.parentNode.removeChild(tempCheck);
}
i--;}
}
</script>
答案 2 :(得分:0)
问题是因为location.replace与DOM加载/呈现略有异步。 JavaScript本身是同步的,与DOM构建内联执行。也就是说,即使页面简要显示HTML内容,JavaScript 也会运行。
如果确实如此,那么约束中的一个解决方案可能是在调用location.replace之前“隐藏”正常的正文内容(例如将body元素的显示设置为none)。
<body>
<script>
if (not_on_a_mobile_device) {
document.body.style.display = 'none';
document.location.replace("http://www.redirect-here.com");
}
</script>