メソッドが存在するかどうかのチェック方法についてですが、普段私は
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
プロポーショナルフォントで文...
-
Excelでのエラー
-
VB.NETで16進数が正しいかどう...
-
VB.Net Object型 空かどうか
-
org.firebirdsql.jdbc.FBSQLExc...
-
エクセルVBAで、条件に一致する...
-
Labelコントロールに数字を代入...
-
staticと+=の意味を・・・
-
VBA 同じ名前のオブジェクトを...
-
同一パッケージにあるクラスが...
-
複数の変数を宣言する時、同時...
-
委譲って何ですか?
-
C#でオブジェクトの有無を取得する
-
JAVAからHTMLへ値を返す方法
-
「天声人語」をインターネット...
-
VB6のツールボックスへのコンポ...
-
A・B・Cクラスとは?
-
Accessの連結・非連結オブジェ...
-
中学2年です‼︎ 明日.学級の級長...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
連続する「\\」をひとつの「\\...
-
VB.NETで16進数が正しいかどう...
-
ファイルダイアログを開いた時...
-
VB.Net Object型 空かどうか
-
Timestamp型への変換について(J...
-
C#の捕捉されない例外処理の対...
-
【JAVA】与えられた金額を貨幣...
-
文字列からダブルクオートの削除
-
VBA Evaluate関数 型が一致しま...
-
String型の日付(2005/11/25)の...
-
nullで、return出来るのはどん...
-
Excelでのエラー
-
0除算の例外処理ができない!!...
-
C# マルチスレッドにおける例外...
-
javaプログラムで背景色を変更...
-
時間の取得
-
全角スペースのチェックについて
-
VBA 400エラー 1004エラー
-
WebClient()以外でネットにアク...
おすすめ情報