我需要阻止页面显示,直到脚本运行

时间:2015-06-29 03:02:36

标签: javascript jquery

我的页面顶部有这个脚本

<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>

所有脚本都检查用户是否在计算机上,而不是移动设备。如果用户在计算机上,则脚本将重定向到其他站点。该脚本工作正常,但有时页面会在重定向发生之前加载并显示片刻。这是一个小细微差别,但我希望有一种方法可以防止页面在重定向时显示任何内容。

3 个答案:

答案 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>