web-dev-qa-db-ja.com

JavaScript navigator.appNameがSafari、Firefox、ChromeのNetscapeを返すのはなぜですか?

どして navigator.appName Safari、Firefox、Chromeの「Netscape」を返しますか?

古いブラウザのNetscapeとどう関係しているのでしょうか? DOM0のせいでしょうか?

44
C graphics

はい、それは互換性の問題のためであり、依存するものではありません。
[〜#〜] mdn [〜#〜]言います: "これはもともとDOMの一部でしたレベル0、ただしHTML5仕様に含まれています。 "

Mozillaこちらのドキュメント をご覧ください。

ところで;これがブラウザ検出に使用できない理由です。 ブラウザの検出は悪い習慣です。可能な限り常に回避する必要があります。代わりに機能検出を実行します。しかし、誰かがこれを主張するなら;代わりにuserAgentプロパティを使用する必要があります。

UPDATE 1互換性の変更 =; IE11は、"Netscape"プロパティに対してnavigator.appNameも返すようになりました。これは、HTML5標準を反映し、他のブラウザーの動作に一致させるためです。 userAgent文字列の変更も参照してください here ...機能検出の詳細 here ...

UPDATE 2Microsoft Edgeは、"Netscape"に対してnavigator.appNameも返します。

42

ジョニー・ステンバックの投稿に基づく:

これは以前のmozillaニュースグループで議論されていましたが、ブラウザでスニッフィングコードを使用するWeb上のすべてのページを変更する場合は、navigator.appNameがmozillaでも「Netscape」を返すことが決定されました(そしてそれは非常に大きな部分です)現在のWebの)mozillaを認識する必要があります。コンテンツ開発者が認めている限り、mozilla == netscape == mozillaであるため、それは起こりません。

ソース ここ

7
enginefree

IE11以降、Explorerはnavigator.appNameを呼び出すときに「Netscape」も返すようになりました。

4
magikMaker

IE 11のブラウザ検出のためにnavigator.userAgentを検索し、そのレイアウトエンジンを探すことができます。私の経験では、かなりうまく機能します。これを参照してください。 post

0
Adam R. Turner