2013-01-22 18 views
9

Ich habe Probleme meine App Laden auf Internet Explorer 7 & 8 bekommen und sogar 9.AngularJS und Internet Explorer

ich die folgende Fehlermeldung erhalten (Konsole)

Uncaught TypeError: Cannot read property 'nodeName' of undefined 

Auf Last der { {}} Variablen laden und verschwinden. Nichts wurde gerendert.
Ich habe dies den HTML-Tag:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns:ng="http://angularjs.org" id="ng-app" class="ng-app: myapp;"> 

I ieshiv.js aus dem AngularUI Rahmen hinzugefügt.
Ich habe

<!--[if lt IE 8]> 
    <script src="files/js/json3.min.js"></script> 
<![endif]--> 

(Frage: Ist das genug, einfach nur mit meinem Kopfteil oder muss ich auch meinen Code ändern?)

ich auch hinzugefügt, dies zu meinem Kopfteil:

<!--[if lte IE 8]> 
     <script> 
     document.createElement('ng-include'); 
     document.createElement('ng-pluralize'); 
     document.createElement('ng-view'); 
     document.createElement('slide'); 
     document.createElement('carousel'); 

     // Optionally these for CSS 
     document.createElement('ng:include'); 
     document.createElement('ng:pluralize'); 
     document.createElement('ng:view'); 
     </script> 
    <![endif]--> 

Und es funktioniert überhaupt nicht. Es werden keine Variablen geladen, die Liste wird gerendert und die Website funktioniert nicht.
Chrome, FF und Opera funktionieren gut.

Haben Sie Hinweise, wo Sie anfangen sollen?

EDIT 1:
Link zu meinem controller.js auf paste.bin
http://pastebin.com/z67qE9ME

EDIT 2:
Ist es vielleicht die Reihenfolge des js Ladens?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> 
<!--[if lt IE 8]> 
    <script src="files/js/json3.min.js"></script> 
<![endif]--> 
<script src="files/js/angular.min.js"></script> 
<script src="files/js/ui-bootstrap-tpls-0.1.0-SNAPSHOT.js"></script> 
<script src="files/js/angular-ui.js"></script> 
<script src="files/js/angular-resource.min.js"></script> 
<script src="files/js/controller.js"></script> 
<script src="files/js/select2.js"></script> 
<script src="files/js/main.js"></script> 

EDIT 3:
Ok, habe ich fauxconsole.js meinem Skript und reinigte den Code und es funktionierte. Nun, zumindest lädt es richtig (ohne CSS-Korrektur). Bei manchen Tags wird jedoch kein Inline-Stil geladen. Hast du eine Idee warum?

<a ng-click="details.show=toggle(marker)" ng-class="{active_marker: active_marker.show == marker.id}" href="#/dealer/{{marker.id}}" class="marker" style="left:{{marker.coordleft}}px;top:{{marker.coordtop}}px"> 
</a></div> 

EDIT 4:
bearbeiten 3 ist auch mit dieser Hilfe hier gelöst:
https://groups.google.com/d/msg/angular/0zHsVuUryKI/ckTvY93NcRsJ

Aber ich habe jetzt ein anderes Problem. In IE 8 und darunter wird die Routenvorlage nicht gerendert. Ich sehe nur die {{}} Variablen und nicht mehr.

EDIT 5:
Das ist seltsam. Ich habe es geschafft, die erste Vorlage richtig zu laden. Alle Klammern {{}} werden ordnungsgemäß geladen.
Ich habe .resolve meiner Ctrl:

// DealerDetailsCtrl 
function DealerDetailsCtrl($scope, $rootScope, $routeParams, dealerService, datasets) { 
    $scope.loading = true; 
    // Abfrage 
    $rootScope.dealerdetails = datasets; 
    // inline styles fuer positionierung laden 
    $rootScope.itemStyle2 = function (item) { 
     return { left: item.divleft * 1 + 390 + 'px', top: item.divtop * 1 + 160 + 'px'}; 
    }; 
    //Feedback zur Message zurruecksetzen 
    $scope.issend = $rootScope.issend; 
    $rootScope.issend = false; 
    $scope.loading = false; 
    //Close Button 
    $rootScope.close = function() { 
     $rootScope.marker = null; 
     $rootScope.details = {show: false}; 
     $rootScope.alldealer = {show: false}; 
     $rootScope.active_marker = null; 
    }; 
    $rootScope.$on("$routeChangeStart", function (event, next, current) { 
     $scope.loading = true; 
    }); 

} 
DealerDetailsCtrl.resolve = { 
    datasets : function($q, $http, $route, $rootScope) { 
     var deferred = $q.defer(); 

     $http.get('files/framework/dealer/'+ $route.current.params.id +'/' + $rootScope.token).success(function(data) { 
      deferred.resolve(data); 
     }); 

     return deferred.promise; 
    } 
}; 

Das Merkwürdige ist.Von der (korrekt gerenderten) Vorlage verlinke ich zu einer zweiten Vorlage und route (vom Dealer /: id zu/dealermessage /: id), aber diese Route (und alles ist gleich einschließlich der Auflösung) wird nicht richtig geladen, gleich Fehler als zuvor, die Vorlage wird nicht gerendert.

Routen:

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
    when('/dealer/:id', { 
     templateUrl: 'files/tpl/dealer-details.html?333', 
     controller: 'DealerDetailsCtrl', 
     activetab: 'details', 
     resolve: DealerDetailsCtrl.resolve 
    }). 
    when('/dealermessage/:id', { 
     templateUrl: 'files/tpl/dealer-message.html?222', 
     controller: 'DealerMessageCtrl', 
     activetab: 'message', 
     resolve: DealerMessageCtrl.resolve 
    }). 
    when('/dealersendmessage/:id', { 
     templateUrl: 'files/tpl/dealer-details.html?444', 
     controller: 'DealerDetailsCtrl', 
     activetab: 'details', 
     resolve: DealerDetailsCtrl.resolve 
    }). 
    otherwise({ 
     redirectTo: '/dealer' 
    }); 
}]); 

Hat jemand eine Ahnung hat, was oder wo der Fehler sein kann?

+0

einige der Veröffentlichung Code in einem Spiel wäre ein guter Weg, um loszulegen. – Patrick

+0

Dies kann ein ziemliches Problem sein, weil es ein Kundenprojekt ist, das in viele Dateien aufgeteilt ist, aber ich werde meine controller.js und die Haupt-HTML-Vorlage veröffentlichen. Einen Augenblick. – Marek123

+0

''? – maxisam

Antwort

0

Immer wenn ich diese Art von Fehlern in IE (speziell 8) bekam, war es eines dieser beiden Probleme.

1) Ich war mit einem benutzerdefinierten Tag wie <auto-complete> und wurde mit nicht document.createElement

2) I-Elemente mit doppelten id Attributen hatte. IE mag das nicht.

Die Methode der Beseitigung funktioniert normalerweise für mich, um das Problem in der Vorlage zu isolieren.