web-dev-qa-db-ja.com

IE throws JavaScript Error:プロパティ 'googleMapsQuery'の値はnullまたは未定義であり、Functionオブジェクトではありません(他のブラウザーで動作します)

IE 9でJavaScriptスコープに本当の問題があります。

これはドキュメントの本文の内部にあります(はい、スクリプトは適切なHTMLの頭に入る必要があることを理解していますが、スクリプトを壊すことはありませんでした)。このページにのみ関連するスクリプトの共有ヘッダーページを台無しにしたくないので、スクリプトは本文にあります。

<script type="text/javascript">
function googleMapsQuery(accountNum) {
    // function code is here (omitted for brevity)
}
</script>

これは、tdブロック内のtrブロック内のtbodyブロック内のtableブロック内のformブロック内のbodyブロック内にあります:

<button id="google-422111" onclick="googleMapsQuery(422111)" type="button">Google This!</button>

スクリプト関数宣言の順序が関係する場合に備えて、スクリプトブロックをフォームの上に移動しました(関係ありません)。

このスクリプトはFireFoxとChromeで問題なく動作しますが、IE 9(互換表示の有無にかかわらず)では、このエラーが表示されます:

SCRIPT5007:プロパティ「googleMapsQuery」の値はnullまたは未定義であり、Functionオブジェクトではありません

JavaScriptスコープを勉強しましたが、IEが 'googleMapsQuery'がプロパティであると考え、それが未定義である理由を理解できません。それは関数であり、定義しました!

12
chriv

私は答えを見つけました、そして、私が報告したにもかかわらず、それはブラウザ特有ではありませんでした。バグは私の機能コードにあり、どのブラウザーでも発生していました。これに要約します。コードには、FireFox/FireBug固有の2行がありました。彼らはconsole.logを使用しました。 IEでは、エラーがスローされたため、コメントアウトしました(またはそう思いました)。私はそれらをコメントアウトしてくだらない仕事をし、私の機能の括弧を破った。

元のコード(console.logを含む):

if (sxti.length <= 50) console.log('sxti=' + sxti);
if (sxph.length <= 50) console.log('sxph=' + sxph);

壊れたコード(コメント内の角かっこが間違っている):

if (sxti.length <= 50) { //console.log('sxti=' + sxti); }
if (sxph.length <= 50) { //console.log('sxph=' + sxph); }

修正されたコード(コメント外の固定ブラケット):

if (sxti.length <= 50) { }//console.log('sxti=' + sxti);
if (sxph.length <= 50) { }//console.log('sxph=' + sxph);

だから、それは私自身のずさんなコーディングでした。関数は実際には定義されていませんでした。構文エラーにより関数が閉じられなかったためです。

まあ、生きて学びます。 ;)

11
chriv

プロパティがnullまたは未定義であるという同様の問題がありました。

これは、IEのドキュメントモードがデフォルトでIE7標準に設定されていたことになりました。これは、互換モードがすべてのイントラネットサイトで使用されるように自動的に設定されていたためです(Tools> 互換表示設定> 互換表示でイントラネットサイトを表示 =)。

21
Chris

セミコロンをonclick="googleMapsQuery(422111);"に追加しようとしましたか。セミコロンがないとエラーが発生するかどうかをテストするのに十分なコードがありませんが、構文の方が好みです。

2
Mark

そのため、同じエラーが発生して同様の状況が発生しました。開発マシンの互換モードを変更するのを忘れていたので、javascriptにもconsole.logコマンドがありました。 IEで互換モードを変更し、console.logコマンドを削除しました。これ以上の問題はありません。

1
Coyte

私の特定のケースでは、組織で使用されているレガシーWebサイトで同様のエラーが発生しました。この問題を解決するために、私はこのWebサイトを「信頼できるサイト」と主張しなければなりませんでした。

そうするには:

  • ツールボタンをクリックし、次にインターネットオプションをクリックします。
  • セキュリティタブに移動します。
  • 信頼済みサイトをクリックしてから、サイトボタンをクリックします。
  • WebサイトのURLを入力し、追加をクリックします。

これは、誰かを助けるリモートケースに残しておきます。

1
TrinTragula