2012-10-12 46 views
0

以下平滑滾動腳本會在Safari中導航導航(定位標記不再有效)。我是一個Javascript新手,誰能告訴我如何檢測此腳本中的Safari並防止它在檢測到Safari時執行?非常感謝!防止在Safari中執行Javascript

// JavaScript Document 
$(document).ready(function() { 
    function filterPath(string) { 
    return string 
    .replace(/^\//,'') 
    .replace(/(index|default).[a-zA-Z]{3,4}$/,'') 
    .replace(/\/$/,''); 
    } 
    var locationPath = filterPath(location.pathname); 
    var scrollElem = scrollableElement('html', 'body'); 

    $('a[href*=#]').each(function() { 
    var thisPath = filterPath(this.pathname) || locationPath; 
    if ( locationPath == thisPath 
    && (location.hostname == this.hostname || !this.hostname) 
    && this.hash.replace(/#/,'')) { 
     var $target = $(this.hash), target = this.hash; 
     if (target) { 
     var targetOffset = $target.offset().top; 
     $(this).click(function(event) { 
      event.preventDefault(); 
      $(scrollElem).animate({scrollTop: targetOffset}, 1300, function() { // scroll speed 
      location.hash = target; 
      }); 
     }); 
     } 
    } 
    }); 

    // use the first element that is "scrollable" 
    function scrollableElement(els) { 
    for (var i = 0, argLength = arguments.length; i <argLength; i++) { 
     var el = arguments[i], 
      $scrollElement = $(el); 
     if ($scrollElement.scrollTop()> 0) { 
     return el; 
     } else { 
     $scrollElement.scrollTop(1); 
     var isScrollable = $scrollElement.scrollTop()> 0; 
     $scrollElement.scrollTop(0); 
     if (isScrollable) { 
      return el; 
     } 
     } 
    } 
    return []; 
    } 

}); 

回答

0
var isSafari = navigator.userAgent.indexOf("Safari") > -1 && navigator.userAgent.indexOf("Chrome") == -1; 
if(!isSafari){ 
    // do your magic 
} 
+0

,也可以是OP應該考慮的完整鏈接..... HTTP:/ /stackoverflow.com/questions/5899783/detect-safari-using-jquery – Rab

+0

@EliasVanOotegem看到更新,請 –

+0

評論被刪除,沒有得到Safari瀏覽器的ATM,所以我不知道的'userAgent'值,這就是爲什麼我建議'navigator.vendor'。無論哪種方式應該工作 –

0

參見:http://api.jquery.com/jQuery.browser/,檢測瀏覽器並執行腳本,只有當它是不是Safari瀏覽器

+0

從文檔:'$ .browser.safari'被棄用,因此該解決方案是不是外的開箱使用 –

0

也許這樣的:

$(document).ready(function() 
{ 
    if (navigator.appVersion.match(/WebKit/) && !navigator.vendor.match(/Google/)) 
    { 
     return; 
    } 
    //rest of your code 
}); 

如果你有$之外的任何代碼(文件).ready回調函數,您可以通過在腳本的頂部寫入以下錯誤來終止腳本:

if (navigator.appVersion.match(/WebKit/) && !navigator.vendor.match(/Google/)) 
{ 
    throw new Error('Safari not supported'); 
}