1

.Net MVC 3 の次のコードは、「Opera 12」または「Opera 11」を返すはずのときに「Opera 9」を返します。これは、Win 7 64 ビットおよび XP 32 ビットの複数のマシンで確認済みです。

public ActionResult TestBrowser()
{
    return Content(Request.Browser.Browser + " " + Request.Browser.MajorVersion);
}

何らかの理由で、Opera のブラウザー タグに 9.8 があり、実際のバージョン番号は末尾にあります。
Opera ヘルプ...について

これは、ブラウザー タグのフォーマットが間違っているという Opera のせいですか、それとも HttpBrowserCapabilitiesBaseクラスの解析が間違っているのですか?

4

3 に答える 3

1

私の経験では、正しいバージョン管理(なりすましのユーザーエージェント文字列ではないと仮定)は、常に最後のスラッシュの後に表示されるバージョンです。したがって、最後のスラッシュを含む前のすべてを削除すると、残りが現在のバージョンになります。

于 2013-02-21T16:59:53.173 に答える
1

@Sashenka: ご指摘のとおり、Opera 文字列のハード部分が必要です。同様の理由で他のブラウザーに同様の考えが必要ないとしても、私は驚かないでしょう。ただし、機能検出は、背後であなたを攻撃するのを待っているワームの別の缶に過ぎません。たとえば、IE だけがリリースされるたびに、物事の処理方法が変わります。つまり、M$ はまったく信用できません。ユーザー エージェント文字列の解析はそれほど難しくなく、ほぼ確実に成功します。とは言うものの、標準に合わせてコードを書き、必要に応じて IE の包帯を組み込み、各ブラウザに設計者が意図したとおりにページを表示させるのは簡単ではないのではないかと思います。良い、悪い、または無関心!:-)

于 2013-02-21T17:12:58.383 に答える
1

これは、Opera のユーザー エージェント文字列と、Opera/9.80 がユーザー エージェント文字列内にハードコードされている理由を説明しています。

http://my.opera.com/community/openweb/idopera/

コメントで述べたように、IE 10 で同じ問題が間もなく発生する可能性があるため、機能検出を確認することをお勧めします。

編集: 1 つの解決策は、ユーザー エージェント文字列を自分で解析することです。

編集 2: ブラウザー検出を使用する場合は、素晴らしい仕事をする Modernizr Javascript ライブラリ ( http://modernizr.com/ ) があります。

于 2013-02-21T16:50:41.527 に答える