【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

メソッドが存在するかどうかのチェック方法についてですが、普段私は
if (オブジェクト名.メソッド名) {
  // 存在する
}
という書き方をしていました。
ところが、window.navigatorが持つメソッドについては、エラーとなってしまってチェックができません。

if (navigator.javaEnabled) { alert("Check") }
と書くと、その行で次のようなエラーが起きてしまいます。
エラー:オブジェクトでサポートされていないプロパティまたはメソッドです。

このような場合は、どうやってチェックをすればよいのでしょうか?

A 回答 (4件)

参考URLの


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

参考URL:http://www.umechando.com/javascript/index.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/14 22:37

あ、少し記述ミスがありました。


navigator.javaEnabled

navigator.javaEnabled()
ですね。

あと、参考URLので如何なもんでしょう。

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

この回答への補足

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

補足日時:2003/10/14 17:51
    • good
    • 0

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>

この回答への補足

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

補足日時:2003/10/14 12:19
    • good
    • 0

良く分からないけど、


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

この回答への補足

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

補足日時:2003/10/11 22:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!