0

我有一些简洁的代码,在加载后会显示<title>几秒钟,然后用不同的<title>. 我们试图达到的效果在某些版本的 Safari 或 iPad 上不起作用,所以我想检查一下 Safari——如果浏览器是 Safari,则取消该效果。我们目前所拥有的不起作用-我很确定问题出在 safariFix 函数中,但我仍然是菜鸟,不确定出了什么问题:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Uppagus</title>
<link rel="stylesheet" type="text/css" href="uppagusSTYLE.css" />
<link rel= "shortcut icon" media="all" type="image/x-icon" href="http://www.uppagus.com/favicon.ico" /> 
<link rel= "icon" media="all" type="image/vnd.microsoft.icon" href="http://uppagus.com/favicon.ico" />
<meta http-equiv="Page-Exit" content="revealTrans(Duration=2.0,Transition=23)">
<script src="jquery.min.js"></script>
<script>
  var isSafari;
  var ua = navigator.userAgent.toLowerCase(); 
  if(ua.indexOf('safari') != -1) { 
    if(ua.indexOf('chrome') > -1) {
      var isSafari = false;
    } else {
      var isSafari = true;
      safariFix();
    }
  } else {
    isSafari = false;
  }

  function safariFix() {
    $(function() {
      $('#googleFix').replaceWith('<script id="safariFix">function updateTitle() { document.getElementsByTagName("title")[0].innerHTML = "Uppagus";</script>');
    });
  }
</script>
<script id="googleFix">
function updateTitle() {
    setTimeout(function() {
        document.getElementsByTagName('title')[0].innerHTML = 'ppagus';
    }, 2000);
}
</script>

...
</head>
4

1 回答 1

1

当浏览器在解析文档时遇到脚本块时,会从上到下执行脚本块。因此,您不能在第一个脚本中使用代码来操作该脚本之后的任何元素。您正在尝试替换之后出现的脚本元素。

但是为什么要尝试替换脚本呢?为什么不把逻辑放在脚本中:

var ua = navigator.userAgent.toLowerCase();
var isSafari = ua.indexOf('safari') != -1 && ua.indexOf('chrome') == -1;

function updateTitle() {
    if (isSafari) {
        document.getElementsByTagName("title")[0].innerHTML = "Uppagus";
    } else {
        setTimeout(function() {
            document.getElementsByTagName('title')[0].innerHTML = 'ppagus';
        }, 2000);
    }
}

(另请注意,您的嵌套 if/else 结构比必要的复杂。)

于 2013-06-15T05:01:33.783 回答