0

IE7は次のエラーを出します:'myapp'は未定義です

//home.html
<script type="application/x-javascript" src="//www.mysite.com/myjs.js"></script>
<script type="text/javascript" charset="utf-8">
    new myapp.myfunc();
</script>

javascriptファイル:

//myjs.js
myapp = {
    myfunc : function(){
        alert('hello world');
    }
};

* home.htmlで使用されているコードを書き直す方法はたくさんあると思いますが、それを変更せずに機能させたいと思います。同様の構造でJSエラー(IE7、IE6)のない実用的な例を見つけました。https://google-developers.appspot.com/custom-search-ads/docs/sample

編集:<script>コードは外部クライアントに渡されるので、できるだけシンプルにしたいと思います。リンクの例を参照してください。

4

3 に答える 3

0

オッカムのカミソリscriptは、IE/MSHTML のいずれかが を含む要素をサポートしていないことを示唆していますtype="application/x-javascript"。これはapplication/x-javascript、 が登録された MIME メディア タイプではないこと、また、これまで必要でなかったことに関係している可能性があります。

//www.mysite.example.com/myjs.jsまたは、その環境でサポートされているURI 参照ではないという事実に関係しています。http://www.mysite.example.com/myjs.js代わりに、完全修飾 URI を使用してください。(また、例として登録済みの例のドメインを使用してください。)

変数として使用する識別子も宣言する必要があります。

var myapp = {
  …
};

これを行わないとmyapp、ドキュメントに指定された要素がある場合に問題が発生する可能性があります。JScript/MSHTML では、識別子の解決によりmyapp、プロパティとして持つスコープ チェーン内のホスト オブジェクトが検出されます。そのプロパティの値は対応する要素オブジェクトへの参照になり、そのプロパティ値を上書きしようとすると実行時エラーが発生します。

于 2013-02-05T02:25:08.330 に答える
-1

本体のLoadイベントにイベントハンドラーを追加します。そのイベントハンドラーで、myapp.myfunc()電話をかけます。

于 2013-02-05T01:37:47.957 に答える
-1

コードを利用できるようにするときはいつでも、ページの良き市民であることを常に確認したいと考えています。つまり、不必要なグローバル変数を作成したくないということであり、作成する変数が十分に一意であることを確認してください。そのため、すぐに呼び出される関数式でコードをラップすることをお勧めします。

また、一般的には、JavaScript を使用してすべてを行う方が簡単です。これは、Google アナリティクスと Facebook プラグインがコードをロードする方法です。

<script type="text/javascript">
(function() {
  var loadScript = function(src, callback) {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = src;
    // modern browsers
    script.onload = callback;
    // IE 6 & 7
    script.onreadystatechange = function() {
      if (this.readyState == 'complete') {
        callback();
      }
    }
    head.appendChild(script);
  };
  loadScript('path/to/myscript.js', function() {
     //script loaded
  });
})();
</script>
于 2013-02-05T02:01:18.537 に答える