henry5: fehler im internet explorer?

hallo
ich verwende auf einer page das javascript von brainjar um divs "ziehbar", bzw. "draggable" zu machen. das script läuft wunderbar auf mac safari und firefox, im ie kann ich es leider nicht testen.
im neuesten safari gibt es die möglichkeit unter "develop" den benutzeragent auf "Internet Explorer" umzustellen. dann wird mir folgender fehler ausgegeben:
"Value undefined (result of expression document.attachEvent) is not object".

hier die url:

http://www.brainjar.com/dhtml/drag/demo.html

läuft das skript auf dem "echten" ie oder ist das effektiv ein fehler?

thx und gruss
henry

  1. Hallo henry

    hier die url:

    http://www.brainjar.com/dhtml/drag/demo.html

    läuft das skript auf dem "echten" ie oder ist das effektiv ein fehler?

    Läuft in meinem „echten” IE6 unter XP ohne Probleme und ohne Fehlermeldungen.

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Läuft in meinem „echten” IE6 unter XP ohne Probleme und ohne Fehlermeldungen.

      hallo detlef
      besten dank fürs testen. dann kann ich das skript ohne bedenken einsetzen.

      beste grüsse
      henry

      1. besten dank fürs testen. dann kann ich das skript ohne bedenken einsetzen.

        Das würde ich nicht so sehen, ein Skript das folgendes benutzt:
        ua = navigator.userAgent;
        ist nicht ohne bedenken einzusetzen.

        Struppi.

        1. Das würde ich nicht so sehen, ein Skript das folgendes benutzt:
          ua = navigator.userAgent;
          ist nicht ohne bedenken einzusetzen.

          Struppi.

          hallo struppi
          danke für den hinweis. das problem ist also einzig die browserabfrage?
          – ansonsten funktioniert das skript meines erachtens sehr gut und ist einfach zu integrieren...

          gruss
          henry

          1. Hi,

            das problem ist also einzig die browserabfrage?

            unwahrscheinlich. Wer sowas macht, begeht in aller Regel noch weitere Kardinalfehler.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
      2. [latex]Mae  govannen![/latex]

        Läuft in meinem „echten” IE6 unter XP ohne Probleme und ohne Fehlermeldungen.

        hallo detlef
        besten dank fürs testen. dann kann ich das skript ohne bedenken einsetzen.

        Du sollteste es ohne Bedenken in die Ablage "P" entsorgen.
        Wie Cheatah schon anmerkte, fragt das Schript den User-Agent-String ab und berücksichtigt dabei nur UA-Strings, in denen MSIE, Gecko oder Netscape6 enthalten sind. Alle anderen Browser werden einfach ignoriert. Das ist ganz großer Müll.

        Cü,

        Kai

        --
        Some things in life are bad, they can really make you mad
        Other things just make you swear and curse.
        When you're chewing on life's gristle, don't grumble, give a whistle
        And this'll help things turn out for the best...
        ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|]
  2. Hi,

    ich verwende auf einer page das javascript von brainjar [...]
    im neuesten safari gibt es die möglichkeit unter "develop" den benutzeragent auf "Internet Explorer" umzustellen. dann wird mir folgender fehler ausgegeben:

    das Script ist offenbar so dumm, den User-Agent-String abzufragen, anstatt die Existenz von Objekten und Eigenschaften zu überprüfen. Folge: Es funktioniert potenziell in *keinem* Browser. Solltest Du für die Software bezahlt haben oder einen anderweitig verpflichtenden Vertrag eingegangen sein, so fordere vom Hersteller einen Bugfix an.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. das Script ist offenbar so dumm, den User-Agent-String abzufragen, anstatt die Existenz von Objekten und Eigenschaften zu überprüfen. Folge: Es funktioniert potenziell in *keinem* Browser. Solltest Du für die Software bezahlt haben oder einen anderweitig verpflichtenden Vertrag eingegangen sein, so fordere vom Hersteller einen Bugfix an.

      Cheatah

      hallo cheatah
      das skript ist unter angegebener url frei verfügbar. der erste teil (die browserprüfung sieht so aus:

      function Browser(){
      var ua,s,i
      this.isIE=false
      this.isNS=false
      this.version=null
      ua=navigator.userAgent
      s="MSIE"
      if((i=ua.indexOf(s))>=0){
      this.isIE=true
      this.version=parseFloat(ua.substr(i+s.length))
      return}
      s="Netscape6/"
      if((i=ua.indexOf(s))>=0){
      this.isNS=true
      this.version=parseFloat(ua.substr(i+s.length))
      return}
      s="Gecko"
      if((i=ua.indexOf(s))>=0){
      this.isNS=true
      this.version=6.1
      return}}
      var browser=new Browser()

      wieso funktioniert das potenziell in keinem browser?

      thx und gruss
      henry

      1. Hi,

        das skript ist unter angegebener url frei verfügbar. der erste teil (die browserprüfung sieht so aus:

        [...]

        ua=navigator.userAgent

        [...]

        sag ich ja, es ist fehlerhaft.

        wieso funktioniert das potenziell in keinem browser?

        Für Safari hast Du es bereits bewiesen. In Firefox und anderen Gecko-basierten Browsern ist es ebenfalls trivial möglich, ohne in die für das Script benötigten Funktionalitäten einzugreifen dieses zu Fehlern zu führen. Opera hat per se ebenfalls entsprechende Möglichkeiten (und wird hier ohnehin nicht beachtet). Und für den IE mag man ein Plugin brauchen, aber damit wird es dann genauso gut gehen. Für alle anderen Browser gilt das selbe: Entweder sie arbeiten standardkonform, dann wird ein Umbenennen des Browsers in "MSIE" zur Nichtfunktionalität führen, oder sie folgen den Wirren des IE, dann ... Nein, ich muss mich korrigieren: Oder sie *sind* der IE, der viele Standards nicht unterstützt hat und somit in Fehler gestürzt werden.

        Wer sich bei der Erkennung von Fähigkeiten auf den User-Agent-String stützt, der sollte seine Lizenz zum Programmieren abgeben.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Hallo,

        der erste teil (die browserprüfung sieht so aus:

        Schau dir mal das Script selbst an, nicht nur der Teil ist das Problem, sondern die ständigen Abfragen:

            if (browser.isIE)  
              dragObj.elNode = window.event.srcElement;  
            if (browser.isNS)  
              dragObj.elNode = event.target;
        

        Hier könnte man einfach abfragen, ob window.event oder event, dann, ob srcElement oder target zur Verfügung steht. Es ist keine »Browsererkennung« notwendig. Das zieht sich so durch das Script. Es macht unsinnige Annahmen, weil es von der Existenz von zwei Browsern ausgeht. Das ist natürlich nicht zukunftsfähig - das Script stammt aus dem Jahr 2001.

        Ein besseres Script ist etwa dieses:
        http://www.walterzorn.com/dragdrop/dragdrop_e.htm

        Mathias

        1. Hallo, mathias
          vielen dank für deinen kommentar.

          Ein besseres Script ist etwa dieses:
          http://www.walterzorn.com/dragdrop/dragdrop_e.htm

          das script von walter zorn ist ohne zweifel eine geniale bibliothek. doch für meine einfache anwendung ist es zu kompliziert und zu umfangreich. so ein riesenskript mag ich nicht gerne umbauen...

          das script von brainjar funktioniert abgesehen von diesem "kardinalsfehler" auch nach 7 jahren im ie6, firefox und safari. zudem ist es damit sehr einfach, neue ziehbare divs hinzuzufügen.
          so habe ich das skript angepasst, die funktion "browser" entfernt und die abfragen umgeschrieben.

          und keine angst: ich verdiene mein geld nicht mit javascript...;-)

          var zIndex=3

          function up(what){
          zIndex++;
          what.style.zIndex=zIndex}

          var dragObj=new Object()

          function dragStart(event,id){
          var el
          var x,y
          if(id)
           dragObj.elNode=document.getElementById(id)
          else{
           if(window.event)
           dragObj.elNode=window.event.srcElement
           else
           dragObj.elNode=event.target
           if(dragObj.elNode.nodeType==3)
           dragObj.elNode=dragObj.elNode.parentNode}
          if(window.event){
           x=window.event.clientX+document.documentElement.scrollLeft
           +document.body.scrollLeft
           y=window.event.clientY+document.documentElement.scrollTop
           +document.body.scrollTop}
          else{
           x=event.clientX+window.scrollX
           y=event.clientY+window.scrollY}
           dragObj.cursorStartX=x
           dragObj.cursorStartY=y
           dragObj.elStartLeft=parseInt(dragObj.elNode.style.left,10)
           dragObj.elStartTop=parseInt(dragObj.elNode.style.top,10)
           if(isNaN(dragObj.elStartLeft))dragObj.elStartLeft=0
           if(isNaN(dragObj.elStartTop))dragObj.elStartTop=0
           if(document.attachEvent){
           document.attachEvent("onmousemove",dragGo)
           document.attachEvent("onmouseup",dragStop)
           window.event.cancelBubble=true
           window.event.returnValue=false}
           else{
           document.addEventListener("mousemove",dragGo,true)
           document.addEventListener("mouseup",dragStop,true)
           event.preventDefault()}}

          function dragGo(event){
          var x,y
          if(window.event){
           x=window.event.clientX+document.documentElement.scrollLeft
           +document.body.scrollLeft
           y=window.event.clientY+document.documentElement.scrollTop
           +document.body.scrollTop}
          else{
           x=event.clientX+window.scrollX
           y=event.clientY+window.scrollY}

          dragObj.elNode.style.left=(dragObj.elStartLeft+x-dragObj.cursorStartX)+"px"
          dragObj.elNode.style.top=(dragObj.elStartTop+y-dragObj.cursorStartY)+"px"
          if(window.event){
           window.event.cancelBubble=true
           window.event.returnValue=false}
          else{
          event.preventDefault()}}

          function dragStop(event){
          if(document.detachEvent){
           document.detachEvent("onmousemove",dragGo)
           document.detachEvent("onmouseup",dragStop)}
          else{
           document.removeEventListener("mousemove",dragGo,true)
           document.removeEventListener("mouseup",dragStop,true)}}