どちらもWebkitベースのブラウザーですが、SafariはURLの引用符をURLエンコードしますが、Chromeはそうしません。
したがって、JSでこれら2つを区別する必要があります。
jQueryのブラウザー検出ドキュメントは、「safari」を非推奨としてマークします。
より良い方法はありますか、または今のところ廃止された値をそのまま使用しますか?
どちらもWebkitベースのブラウザーですが、SafariはURLの引用符をURLエンコードしますが、Chromeはそうしません。
したがって、JSでこれら2つを区別する必要があります。
jQueryのブラウザー検出ドキュメントは、「safari」を非推奨としてマークします。
より良い方法はありますか、または今のところ廃止された値をそのまま使用しますか?
回答:
feature detection
とUseragent
文字列の組み合わせを使用する:
var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
var is_Edge = navigator.userAgent.indexOf("Edge") > -1;
var is_chrome = !!window.chrome && !is_opera && !is_Edge;
var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !is_Edge;
var is_firefox = typeof window.InstallTrigger !== 'undefined';
var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
使用法:
if (is_safari) alert('Safari');
またはSafariの場合のみ、これを使用します。
if ( /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
(Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)
以下はSafari 3.0以降を識別し、Chromeと区別します。
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
残念ながら、上記の例は、AndroidのデフォルトのブラウザーをSafariとして検出しますが、そうではありません。使った
navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1
サファリをチェックするために私はこれを使いました:
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert('this is safari');
}
正常に動作します。
どうやら、唯一の信頼性が高く、受け入れられているソリューションは、次のような機能検出を行うことです。
browser_treats_urls_like_safari_does = false;
var last_location_hash = location.hash;
location.hash = '"blah"';
if (location.hash == '#%22blah%22')
browser_treats_urls_like_safari_does = true;
location.hash = last_location_hash;
ブラウザを確認する場合はを使用してください$.browser
。ただし、機能サポートをチェックする場合(推奨)、次を使用します。$.support
。
ページの機能を有効または無効にするために$ .browserを使用しないでください。理由が信頼できないため、一般的にはお勧めできません。
機能サポートが必要な場合は、modernizrをお勧めします。
location.hash = '"blah"'; if (location.hash == '#%22blah%22') alert('is Safari');
ですか?
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
これを修正する非常に便利な方法は、ブラウザのWebkitバージョンを検出し、それが少なくとも必要なバージョンかどうかを確認することです。
jQueryを使用すると、次のようになります。
"use strict";
$(document).ready(function() {
var appVersion = navigator.appVersion;
var webkitVersion_positionStart = appVersion.indexOf("AppleWebKit/") + 12;
var webkitVersion_positionEnd = webkitVersion_positionStart + 3;
var webkitVersion = appVersion.slice(webkitVersion_positionStart, webkitVersion_positionEnd);
console.log(webkitVersion);
if (webkitVersion < 537) {
console.log("webkit outdated.");
} else {
console.log("webkit ok.");
};
});
これは、ブラウザーのさまざまなWebkit実装の問題を処理するための安全で永続的な修正を提供します。
幸せなコーディング!
これにより、ブラウザがSafariかどうかが決まります。
if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
alert(its safari);
}else {
alert('its not safari');
}
// Safari uses pre-calculated pixels, so use this feature to detect Safari
var canva = document.createElement('canvas');
var ctx = canva.getContext("2d");
var img = ctx.getImageData(0, 0, 1, 1);
var pix = img.data; // byte array, rgba
var isSafari = (pix[3] != 0); // alpha in Safari is not zero
私はAppleのブラウザーエンジンを検出するために使用します。この単純なJavaScriptの条件:
navigator.vendor.startsWith('Apple')
一般的な関数
var getBrowseActive = function (browserName) {
return navigator.userAgent.indexOf(browserName) > -1;
};
$.browser.safari === true
。ねえ。