1window.browserDetect = { 2 isSafari: function () { 3 const ua = navigator.userAgent; 4 const vendor = navigator.vendor || ""; 5 // True Safari if it has "Safari" but NOT these other brands 6 const isSafariUA = 7 /safari/i.test(ua) && 8 !/chrome|crios|crmo|chromium|edg|edge|opr|opera|fxios|firefox/i.test(ua); 9 10 const isAppleVendor = vendor.indexOf("Apple") > -1; 11 12 // iPadOS 13+ reports as "MacIntel" but is touch-capable 13 const iPadOS13Safari = 14 navigator.platform === "MacIntel" && 15 navigator.maxTouchPoints > 1 && 16 isSafariUA; 17 18 return (isSafariUA && isAppleVendor) || iPadOS13Safari; 19 }, 20 21 // iOS note: all browsers use WebKit (Safari engine), even Chrome/Firefox 22 isIOSWebKit: function () { 23 const ua = navigator.userAgent; 24 const isiOS = 25 /iPad|iPhone|iPod/.test(ua) || 26 (navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1); 27 const isWebKit = /WebKit/i.test(ua); 28 return isiOS && isWebKit; 29 } 30};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.