• ベストアンサー

メソッドが存在するかどうかのチェック方法

メソッドが存在するかどうかのチェック方法についてですが、普段私は if (オブジェクト名.メソッド名) {   // 存在する } という書き方をしていました。 ところが、window.navigatorが持つメソッドについては、エラーとなってしまってチェックができません。 if (navigator.javaEnabled) { alert("Check") } と書くと、その行で次のようなエラーが起きてしまいます。 エラー:オブジェクトでサポートされていないプロパティまたはメソッドです。 このような場合は、どうやってチェックをすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.4

参考URLの 「クロスブラウザなスクリプトのために」 辺りの事を仰っているのでしょうか。

参考URL:
http://www.umechando.com/javascript/index.html
mone
質問者

お礼

> 「クロスブラウザなスクリプトのために」 > 辺りの事を仰っているのでしょうか。 はい、そうです。 参考URLの方を拝見させていただいたところ、typeofという演算子を見つけることができました。早速、 if (typeof(navigator.javaEnabled) != typeof(undefined)) としたところ、エラーもなくチェックすることができました。 typeofについては別のサイトで「JavaScript1.1から実装された」という記述も見つけることができましたので、そのチェックとともに使用すれば目的が達成できそうです。 本当にどうもありがとうございました。 ※ところで、IEでtypeof(navigator.javaEnabled)の値はunknownとなり、MSDNにある「typeofが返す可能性のある文字列」には含まれていませんでした。どうもこのメソッドは特殊扱いのようです。

その他の回答 (3)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

あ、少し記述ミスがありました。 navigator.javaEnabled ↓ navigator.javaEnabled() ですね。 あと、参考URLので如何なもんでしょう。

参考URL:
http://home.att.ne.jp/gold/naoki/AL1/0301jp.html
mone
質問者

補足

回答ありがとうございます。 参考URLも拝見させていただきましたが、要点が伝わっていないようですので、再度補足させていただきます。 navigator.javaEnabledメソッドを使ってJavaが利用可能かどうか調べられることは分かっています。 今回私が知りたいのは、navigator.javaEnabledメソッド自体がサポートされているかどうかを調べる方法です。 通常は if (メソッド名) で調べられるのですが、navigator.javaEnabledのみエラーとなってしまうのです。 また、参考URLのスクリプトはnavigator.javaEnabled()を2回使用していますが、JavaがOFFの場合、1度目のチェックでfalseとなるため「Javaが使用禁止になっています。」などは表示されません。間違って書かれたものだと思われます。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

try~catchを使用して、 エラー番号:-2146827850 エラー内容:オブジェクトでサポートされていないプロパティまたはメソッドです。 エラー番号を条件式で判定すれば可能だと思いますけど、如何でしょうか。 以下、サンプルです。(IE6x確認済み) <script language="javascript"> <!--   try {     if (navigator.javaEnabled) { alert("Check"); }     alert("Support");   } catch(err) {     if (err.number = -2146827850) {       alert("NoSupport");     } else {       alert(err.number + " : " + err.description);     }   } //--> </script>

mone
質問者

補足

回答ありがとうございます。 試してみましたが、IEはnavigator.javaEnabledメソッドが存在するのにNoSupportとなってしまいます。 IE6x確認済み、とありますが、alert("Support")が実行されたのでしょうか? また、try~catchはNN4などでサポートされていないブラウザでは構文エラーとなってしまうため、使用しないことになっていました。説明不足ですみませんでした。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

良く分からないけど、 旧ネスケやIEでは、 if (window.navigator.javaEnabled()) { alert("Check") } でうまくいきますね。 逆にMozilla Firebirdだと反応しないけど。

mone
質問者

補足

回答ありがとうございます。 > if (window.navigator.javaEnabled()) { alert("Check") } > でうまくいきますね。 これではnavigator.javaEnabled()を実行し、その結果を見てますよね?そうではなく、そのブラウザのJavaScriptがnavigator.javaEnabledというメソッドをサポートしているかどうかが知りたいのです。 例えばwindow.stop()は、NNではサポートされていますがIEではサポートされていないメソッドです。それを確かめるのに、 alert(window.stop ? "Supported" : "NoSupport"); と書けますよね? それとも、この確認方法自体が間違っているのでしょうか?何か情報をお持ちの方おられましたら、よろしくお願いします。

関連するQ&A

専門家に質問してみよう