

メソッドが存在するかどうかのチェック方法についてですが、普段私は
if (オブジェクト名.メソッド名) {
// 存在する
}
という書き方をしていました。
ところが、window.navigatorが持つメソッドについては、エラーとなってしまってチェックができません。
if (navigator.javaEnabled) { alert("Check") }
と書くと、その行で次のようなエラーが起きてしまいます。
エラー:オブジェクトでサポートされていないプロパティまたはメソッドです。
このような場合は、どうやってチェックをすればよいのでしょうか?
No.4ベストアンサー
- 回答日時:
> 「クロスブラウザなスクリプトのために」
> 辺りの事を仰っているのでしょうか。
はい、そうです。
参考URLの方を拝見させていただいたところ、typeofという演算子を見つけることができました。早速、
if (typeof(navigator.javaEnabled) != typeof(undefined))
としたところ、エラーもなくチェックすることができました。
typeofについては別のサイトで「JavaScript1.1から実装された」という記述も見つけることができましたので、そのチェックとともに使用すれば目的が達成できそうです。
本当にどうもありがとうございました。
※ところで、IEでtypeof(navigator.javaEnabled)の値はunknownとなり、MSDNにある「typeofが返す可能性のある文字列」には含まれていませんでした。どうもこのメソッドは特殊扱いのようです。
No.3
- 回答日時:
あ、少し記述ミスがありました。
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が使用禁止になっています。」などは表示されません。間違って書かれたものだと思われます。
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>
この回答への補足
回答ありがとうございます。
試してみましたが、IEはnavigator.javaEnabledメソッドが存在するのにNoSupportとなってしまいます。
IE6x確認済み、とありますが、alert("Support")が実行されたのでしょうか?
また、try~catchはNN4などでサポートされていないブラウザでは構文エラーとなってしまうため、使用しないことになっていました。説明不足ですみませんでした。
No.1
- 回答日時:
良く分からないけど、
旧ネスケや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");
と書けますよね?
それとも、この確認方法自体が間違っているのでしょうか?何か情報をお持ちの方おられましたら、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
SQLException getNextException()
-
C# UriFormatExceptionの回避
-
ファイルダイアログを開いた時...
-
javaプログラムで背景色を変更...
-
文字列からダブルクオートの削除
-
Timestamp型への変換について(J...
-
Excelでのエラー
-
例外ってIf文の中に入れますか...
-
0除算の例外処理ができない!!...
-
VB.Net Object型 空かどうか
-
VC++におけるCStringの変換
-
エクセルVBAで、条件に一致する...
-
private static という変数の修飾
-
(vba)他のアプリケーションの右...
-
ラジオボタンの選択判定
-
servletからjspへオブジェクト...
-
Java初級 引数に適用できません
-
EXCEL VBAにて動的にCheckBOXを...
-
ウィンドウを最前面にできません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
VB.Net Object型 空かどうか
-
時間の取得
-
VBA Evaluate関数 型が一致しま...
-
連続する「\\」をひとつの「\\...
-
C#の捕捉されない例外処理の対...
-
Excelでのエラー
-
ファイルダイアログを開いた時...
-
Timestamp型への変換について(J...
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
nullで、return出来るのはどん...
-
if文が通りません。。。
-
ブックマークレットについて
-
数字か文字列かを判定する関数
-
Javaで文字列をゼロ埋め(ゼロパ...
-
VC++におけるCStringの変換
-
JSPからのパラメータチェック
-
C# の例外処理について
おすすめ情報