fehler im internet explorer?
henry5
- javascript
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
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
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
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.
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
Hi,
das problem ist also einzig die browserabfrage?
unwahrscheinlich. Wer sowas macht, begeht in aller Regel noch weitere Kardinalfehler.
Cheatah
[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
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
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
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
Grundlage für Zitat #981.
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
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)}}