私はアトラスの使用に慣れています。最近、jQuery に移行し始め、時にはプロトタイプを作成しています。私が現在取り組んでいるプロジェクトは、プロトタイプを使用しています。
Prototype で、ブラウザの名前とバージョンを取得する簡単な方法はありますか? API ドキュメントを調べましたが、見つからないようです。
私はアトラスの使用に慣れています。最近、jQuery に移行し始め、時にはプロトタイプを作成しています。私が現在取り組んでいるプロジェクトは、プロトタイプを使用しています。
Prototype で、ブラウザの名前とバージョンを取得する簡単な方法はありますか? API ドキュメントを調べましたが、見つからないようです。
nertzy の回答の完成として、これを使用して IE バージョンを検出する機能を追加できます。
Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7;
一方、サーバー側でもユーザー エージェントの詳細を検出する必要があります。とにかく、ブラウザー検出は、ブラウザー機能の検出が失敗した場合にのみ使用される、クロスブラウザー スクリプトを作成するための重大な欠陥のある戦略です。ユーザーが自分のユーザー エージェントの詳細を変更するのは非常に簡単です。
Prototype には、どのブラウザが実行されているかを知るためにチェックできるフラグがいくつか用意されています。特定のブラウザをチェックするよりも、使用したい機能をチェックする方がはるかに良い方法であることに注意してください。
prototype.js
以下は、現在ソース ツリーにある のブラウザおよび機能検出部分です。
var Prototype = {
Browser: {
IE: !!(window.attachEvent &&
navigator.userAgent.indexOf('Opera') === -1),
Opera: navigator.userAgent.indexOf('Opera') > -1,
WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
Gecko: navigator.userAgent.indexOf('Gecko') > -1 &&
navigator.userAgent.indexOf('KHTML') === -1,
MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
},
BrowserFeatures: {
XPath: !!document.evaluate,
SelectorsAPI: !!document.querySelector,
ElementExtensions: !!window.HTMLElement,
SpecificElementExtensions:
document.createElement('div')['__proto__'] &&
document.createElement('div')['__proto__'] !==
document.createElement('form')['__proto__']
},
}
したがって、現在のブラウザが の値を調べることで IE かどうかを確認できますPrototype.Browser.IE
。または、将来の互換性を高めて、XPath などの特定の機能を確認することもできますPrototype.BrowserFeatures.XPath
。
その通りです。prototype には、ブラウザーの名前やバージョンを確認するためのユーティリティはありません。
特にブラウザ情報をプラグインとして取得する必要がある場合は、以下を追加することをお勧めします (jQuery から直接取得)。
var Browser = Class.create({
initialize: function() {
var userAgent = navigator.userAgent.toLowerCase();
this.version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
this.webkit = /webkit/.test( userAgent );
this.opera = /opera/.test( userAgent );
this.msie = /msie/.test( userAgent ) && !/opera/.test( userAgent );
this.mozilla = /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent );
}
});
私はこれを Prototype のブラウザー定義に加えて使用します。
Object.extend(Prototype.Browser, {
ie6: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 6 ? true : false) : false,
ie7: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 7 ? true : false) : false,
ie8: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 8 ? true : false) : false,
ie9: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 9 ? true : false) : false
});
それが役に立てば幸い!
私はprototype.jsを拡張しました:
var Prototype = { ... };
これとともに:
// extension
if (Prototype.Browser.IE) {
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1);
}
}
私にとっては問題なく動作します。呼び出しは次のようになります。
if (Prototype.Browser.IE && Prototype.BrowserFeatures['Version'] == 8) { ... }
<script type="text/JavaScript">
function getBrowserVersion()
{
var msg = "Not Recognised Browser";
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
{
var ffversion = new Number(RegExp.$1)
for (var i = 1; i < 20; i++)
{
if (ffversion == i)
{
msg = "FF" + i + "x";
break;
}
}
}
else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
{
var ieversion = new Number(RegExp.$1)
for (var i = 1; i < 20; i++)
{
if (ieversion == i)
{
msg = "IE" + i + "x";
break;
}
}
}
alert(msg); // return msg;
}
</script>