【问题标题】:backbone.js IE8 appendChild() error骨干.js IE8 appendChild() 错误
【发布时间】:2013-01-23 07:15:36
【问题描述】:

典型的“适用于 Chrome/FF 但不适用于 IE”的故事。不过 IE9 似乎处理得很好。

IE 控制台中出现的唯一内容是:
SCRIPT65535:意外调用方法或属性访问。
jquery.min.js,第 3 行字符 32461

这是跟踪错误的 IE Profiler 的screenshot

这是我的 Nav.js 文件中的代码:

    // Build nav menu array
    var navLinks =  [ {"style" : "home"         ,"page" : ""                    ,"name" : "Home"                ,"tier" : 1     ,"icon" : "home"}, 
              {"style" : "job-trans"    ,"page" : "view/jobTransaction" ,"name" : "Job Transactions"    ,"tier" : 1     ,"icon" : "barcode"},
              {"style" : "job"          ,"page" : "view/job"            ,"name" : "Jobs"                ,"tier" : 1     ,"icon" : "inbox"},
              {"style" : "user"         ,"page" : "view/user"           ,"name" : "Users"               ,"tier" : 1     ,"icon" : "user"},
              {"style" : "report"       ,"page" : "page/report"         ,"name" : "Reports"             ,"tier" : 2},// ,"icon" : "signal"},
              {"style" : "customer"     ,"page" : "view/customer"       ,"name" : "Customers"           ,"tier" : 2}
            ];

    var jobSearchAttr = $.browser.msie ? "value=\"Enter Job #\" data-browser=\"IE\" style=\"font-size: 16px\"" : "placeholder=\"Enter Job #\"";
    var userSearchAttr = $.browser.msie ? "value=\"Enter User ID\" data-browser=\"IE\" style=\"font-size: 16px; padding-left:0;\"" : "placeholder=\"Enter User ID\"";

    // Sort array elements into buttons and dropdowns with appropriate elements
    var i, t1LinkArray = [], t2LinkArray = [], t2ClassArray = [];
    for (var i = 0; i < navLinks.length; i++) {
        switch(navLinks[i]["tier"]) {
            case 1:
                t1LinkArray.push( "<li class=\"" + navLinks[i]['style'] + "\"><a href=\"#/" + navLinks[i]['page'] + "\"><i class=\"icon-" + navLinks[i]['icon'] + " icon-white\"></i> " + navLinks[i]['name'] + "</a></li>" );
                break;
            case 3:
                t2LinkArray.push( "<li class=\"" + navLinks[i]['style'] + "\"><a href=\"#/" + navLinks[i]['page'] + "\">" + navLinks[i]['name'] + "</a></li>" );
                t2ClassArray.push( navLinks[i]['style'] );
                break;
        }
    }

    // Create Navbar View
    NavView = Backbone.View.extend({
        // Define View template
        template: _.template( $('#navbarTemplate').html() ),

        initialize: function () {
            this.render();
        },

        render: function () {
            // Call the template and pass data object
            this.$el.html( this.template({ t1LinkArray : t1LinkArray, t2LinkArray : t2LinkArray, t2ClassArray : t2ClassArray }) );
        },

    });
    var nav = new NavView({ el:$('nav') }); 

不知道为什么这只在 IE 7/8 中崩溃。

EDIT :: 这是模板,目前嵌入在正文下方。

        <div class="navbar navbar-fixed-top" style="clear: both;">
          <div class="navbar-inner">
            <div id="navbar" class="container-fluid">

              <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </a>

              <p class="navbar-text pull-right"><a class="brand" href="/workflow3"><em>Brand</em></a></p>

              <div class="nav-collapse pull-left">
                <ul class="nav">
                  <!-- List Tier 1 pages -->
                  {{ t1LinkArray.join("\n") }}

                  <!-- Style dropdown with each child's page class -->
                  <li class="dropdown {{ t2ClassArray.join(" ") }}"> 

                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">More<b class="caret"></b>
                    </a>
                    <ul class="dropdown-menu">
                      <!--  List Tier 2 pages -->
                      {{ t2LinkArray.join("\n") }}
                    </ul>
                  </li>
                </ul>

              </div> <!-- /.nav-collapse -->
            </div> <!-- /.container-fluid -->
          </div> <!-- /.navbar-inner -->
        </div> <!-- /.navbar -->

【问题讨论】:

  • 你的模板代码是什么样的?
  • 查看模板代码的编辑。
  • 我假设“#navbarTemplate”是包含此模板的脚本上的 id?因为它不在您提供的 HTML 中...
  • 顺便说一句,我在这个问题上做了一些搜索,发现了一些让我感兴趣的东西,那就是有人在缩小版的 jquery 上遇到了同样的错误,当他们进入原始版本时它就消失了.你试过这个吗?
  • 是的,#navbarTemplate 是 ID,但语法突出显示并不喜欢脚本标签。 ;) .. 我没有听说过缩小版本会导致问题,我会在早上尝试一下,看看它是否能解决问题。谢谢你的建议!

标签: javascript jquery internet-explorer backbone.js cross-browser


【解决方案1】:

老问题,但我今天遇到了这个错误,这是最好的结果,所以我猜仍然相关。

您在标记中使用了 html5 数据属性 - 大概您的文档是 html5?如果你使用了 IE8 不支持的任何新标签(没有添加一些描述的填充),jQuery 会产生这个错误。在你的页面头部试试这个。

<!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

除此之外,它显然倾向于出现在格式错误的 html 中 - 例如。如果您忘记关闭标签或错过属性中的右引号。

【讨论】:

  • 谢谢。你救了我的命。
  • 几个月前我错过了这个回复,但我想弄清楚为什么我回去看看。以为我已经将 shiv 包括在内了,果然... 仍然有可能出现格式错误的 html,很难诊断出这么多模板中的东西。当我有时间时,我将不得不回顾一下。
  • 非常感谢,帮了大忙。
【解决方案2】:

我今天刚刚帮助同事解决了 IE8 中的这个问题。我们发现他试图附加到一个不能有子元素的元素(在他的例子中是一个 IMG 标签)。

我注意到new NavView({ el:$('nav') }); 上的 jQuery 选择器应该是 .nav 没有nav 标记(至少在您的代码示例中),因此它试图将节点添加到不存在的元素。

【讨论】:

  • 你是对的,我的示例中没有包含 html。它确实在我的 index.html 文件中引用了 。 (我不得不回去看看以确保。)鉴于到目前为止我所看到的回复,我有可能只是在某处遗漏了一个结束标签。有时间我会看看的。不过感谢您的提醒,我希望它对那些前来寻找的人有所帮助。
【解决方案3】:

最终我仍然没有找到解决手头实际问题的方法。从技术上讲,这甚至不算是一种变通方法,但它确实创造了一个工作环境!

http://www.chromium.org/developers/how-tos/chrome-frame-getting-started

优势明显,不再需要迎合 IE 的特性。

我讨厌不知道是什么原因造成的,所以请其他人随时回答。

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 2013-07-26
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2011-11-26
    • 2011-10-18
    相关资源
    最近更新 更多