2013-06-15 3 views
0

У меня есть аккуратный код, который отображает один <title> в течение пары секунд после загрузки, а затем заменяет его другим <title>. Эффект, который мы пытаемся достичь, не работает в некоторых версиях Safari или iPad, поэтому я хочу проверить Safari - и если браузер Safari, отмените эффект. То, что мы имеем на данный момент не работает - я уверен, что проблема заключается в функции safariFix, но я еще нуб, и не уверен, что это не так: блокиusing replaceWith на заголовке окна в зависимости от браузера

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

ответ

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); 
    } 
} 

(Заметим также, что ваши вложенные если/другое структура является более сложным, чем это необходимо.)