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

奥卡姆剃刀建议 IE/MSHTML 不支持script带有type="application/x-javascript". 这可能与它application/x-javascript不是注册的 MIME 媒体类型有关,也没有必要

或者它与在该环境中//www.mysite.example.com/myjs.js不受支持的URI 引用这一事实有关。改为使用完全限定的 URI http://www.mysite.example.com/myjs.js。(请使用注册的示例域作为示例。)

您还应该声明您打算用作变量的标识符:

var myapp = {
  …
};

如果您不这样做,则如果myapp文档中存在指定的元素,则可能会出现问题。在 JScript/MSHTML 中,标识符解析将在范围链中找到一个宿主对象,并将myapp其作为其属性。该属性的值将是对相应元素对象的引用,尝试覆盖该属性值将导致运行时错误。

于 2013-02-05T02:25:08.330 回答
-1

将事件处理程序添加到正文的Loadevent。在该事件处理程序中,拨打您的myapp.myfunc()电话。

于 2013-02-05T01:37:47.957 回答
-1

每当您使您的代码可供消费时,您总是希望确保您是页面上的好公民。这意味着您不想创建不必要的全局变量,并确保您创建的全局变量足够独特。这就是为什么将代码包装在立即调用的函数表达式中是个好主意的原因。

此外,使用 javascript 完成整个操作通常更容易。这就是谷歌分析和 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 回答