IE vs. DOM // domready

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • IE vs. DOM // domready

    Hi zusammen.

    Ich habe folgende Seite im Netz gefunden, welche "ein" Problem bzgl. IE/DOM beschreibt:

    "Operation Aborted" error in IE when inserting new elements into the DOM, and fix - Dynamic Drive Forums

    Den Code habe ich auf einer Mini-Testseite (siehe Anhang) eingebunden und entsprechend JS-Errors erhalten, welche ich einigermaßen gefixt habe.

    Der Mainfunktion wird "functionref" übergeben. Wie kann ich hier dynamisch die Fkt aufrufen, deren Fkt-Name übergeben wurde?

    Gibt es noch andere Vorgehensweisen, um dem IE ein schnelles DOM-Manipulieren zu ermöglichen?

    Ein window.onload ist keine Option.

    Thx
    Haxe
    Angehängte Dateien
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |



  • #2
    Zitat von Abraxax Beitrag anzeigen
    Der Mainfunktion wird "functionref" übergeben. Wie kann ich hier dynamisch die Fkt aufrufen, deren Fkt-Name übergeben wurde?
    Mit der bekannten Schreibweise, die mit eckigen Klammern auf Eigenschaften/Methoden eines Elements zugreift. „Normale“ Funktionen sind Methoden des window-Objektes.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hey.

      Ich habe deinen Vorschlag getestet, jedoch ohne Erfolg.

      So habe ich den Aufruf mittels "dynamisch" übergebenen Fkt Name realisiert.

      window[functionref]();

      So steht es auch in den verschiedensten Seiten im Netz. Ich denke auch, dass es das ist, was du meinst.

      Mindestens im FF erhalte ich jedoch die Meldung

      Error: window[functionref] is not a function
      Source file: ****test.html
      Line: 35

      Code:
      	// Mozilla, Opera and webkit nightlies currently support this event
      	if (document.addEventListener) {
      		// Use the handy event callback
      		document.addEventListener("DOMContentLoaded", function(){
      			document.removeEventListener("DOMContentLoaded", arguments.callee, false );
      			window[functionref]();  // line 35
      			dd_domreadycheck=true
      		}, false )
      	}

      Bin ich verrückt, habe ich was übersehen, oder liege ich total falsch?
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Hallo,

        zeig mal bitte den Code mit der Definition dieser Funktion.

        Edit: du machst das über JQuery? Das mit window[functionref]() ist Quatsch. Einfach functionref(), wenn es als Argument übergeben wurde. Dann existiert es ja nicht im globalen Scope.

        Gruß,

        Amica
        Zuletzt geändert von AmicaNoctis; 10.03.2010, 11:56.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Hey Amica.

          Der erste Code ist im ersten Post.

          Dort habe ich die FKt functionref() im Object definieren müssen, damit ich keinen Fehler bekomme.

          Der Sinn war den aufzurufenden Fkt Name dem domready() mitzugeben.

          jQuery nutze ich nicht. Der Schreiberling dieser Fkt (siehe URL im ersten Post) hat sich davon wohl inspirieren lassen.

          Ich habe noch eine nette Fkt gefunden, die auf Anhieb funktionierte.
          domready.js - JavaScript - Snipplr

          Ich denke, dass ich diesen Weg weiterverfolgen werden.

          Eine Frage jedoch dazu. Das Event-Object kann ich doch umbennen, damit ich nicht in Konflikt gerate, wenn ich den Code dynamisch auf Websites schieben, welche evtl. mit einem JS-Framework arbeiten.

          Thx
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Zitat von Abraxax Beitrag anzeigen
            Das Event-Object kann ich doch umbennen, damit ich nicht in Konflikt gerate, wenn ich den Code dynamisch auf Websites schieben, welche evtl. mit einem JS-Framework arbeiten.
            Solange du alle Vorkommen umbenennst...
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von AmicaNoctis Beitrag anzeigen
              Solange du alle Vorkommen umbenennst...
              Das versteht sich von selbst. ;-)

              Danke.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Zitat von Abraxax Beitrag anzeigen
                So habe ich den Aufruf mittels "dynamisch" übergebenen Fkt Name realisiert.

                window[functionref]();
                Und functionref ist dabei ein String, der einen Funktionsnamen enthält (und wurde nur etwas unpassend benannt) ...?
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Das habe ich auch so verstanden. Daher wundert es mich, dass es einen JS Error produziert.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Das Problem besteht also weiterhin?

                    Zeig mal bitte deinen gesamten JS-Code her.

                    Gruß,

                    Amica
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Das Problem besteht grundsätzlich schon, aber ich bin ja schon auf den anderen Tripp ;-)

                      Ich wollte nur wahsagas Post nicht ignorieren, zumal mich das Thema ja interessiert ;-)

                      Interessanterweise klappt es jetzt.

                      HTML-Code:
                      <html>
                      <head>
                      	<title>TEST</title>
                      </head>
                      
                      <body>
                      
                      <script type="text/javascript">
                      
                      var dd_domreadycheck = false;
                      
                      // Eigentliche FKT zum Aufrufen, wenn READY.
                      function start() {
                      	alert('ready');
                      }
                      
                      domready = function(functionref){ //based on code from the jQuery library
                      
                      	if (dd_domreadycheck){
                      		window[functionref]()
                      		return
                      	}
                      	// Mozilla, Opera and webkit nightlies currently support this event
                      	if (document.addEventListener) {
                      		// Use the handy event callback
                      		document.addEventListener("DOMContentLoaded", function(){
                      			document.removeEventListener("DOMContentLoaded", arguments.callee, false );
                      			window[functionref]();
                      			dd_domreadycheck=true
                      		}, false )
                      	}
                      	else if (document.attachEvent){
                      		// If IE and not an iframe
                      		// continually check to see if the document is ready
                      		if ( document.documentElement.doScroll && window == window.top) (function(){
                      			if (dd_domreadycheck) return
                      			try{
                      				// If IE is used, use the trick by Diego Perini
                      				// http://javascript.nwbox.com/IEContentLoaded/
                      				document.documentElement.doScroll("left")
                      			}catch(error){
                      				setTimeout( arguments.callee, 0)
                      				return;
                      			}
                      			//and execute any waiting functions
                      			window[functionref]();
                      			dd_domreadycheck=true
                      		})();
                      	}
                      }
                      
                      
                      domready('start');
                      
                      </script>
                      
                      
                      
                      </body>
                      </html>
                      Zuletzt geändert von AmicaNoctis; 11.03.2010, 13:37. Grund: HTML-CodeTags gesponsert, damit's bunt wird ;)
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar

                      Lädt...
                      X