ecklvo: DreamWeaver-Javascript eine Sch**** oder nicht

Hallo zusammen?
Als ich letztens etwas postete wurde ich darauf aufmerksam gemacht dass Die Javscript-Anweisungen vom Dreamweaver mehr oder minder Müll sind. Nun wollte ich fragen, ob mir jemand hier Ersat sagen kann, beziehunsweise begründen kann, weshalb er/sie dieser Ansicht ist.

Auf meinen Websites benötige ich grundsätzlich ohnehin nur die fünf Funktionen:

function MM_preloadImages() { //3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

===================================================================
zum Abschluss noch etwas anderes:
mit der DW-Funktion wird die window.open-Funktion grundsätzlich im <script>-Bereich vereinbart; wäre es auch möglich die Vereinbarung im head wegzulassen und direkt beim link mit onClick="window.open('bla.html','blafenster','width=320,blabla') zu schreiben, so dass das in einer Riesenanzahl von Browsern funktioniert (min. Opera, IE & NS >4)

ich weiß das war jetzt viel auf einmal, aber was geschrieben werden muss, muss geschrieben werden.
danke, V

  1. Hallo,

    Das Problem bei Dreamweaver Code ist dass er meist wesentlich laenger als selbstgeschriebener ist, und verwirrender ist. Dadurch dass man das Script nicht 100%ig versteht ist es fast unmoeglich es zu debuggen wenn mal was nicht geht. Ausserdem ist der Code in meiner Erfahrung nicht immer stabil (ok, das war vor 2 Jahren, seitdem schreib ich den Code selber, ist vielleicht inzwischen besser).

    Zu Deinem letzten Punkt. Jeder javascript-faehige Browser versteht <script>-tags im Head. Also auch Opera, Netscape 3, IE 4. natuerlich kannst Du kleinere actionen direkt in ein <A HREF..> oder onCLick packen, aber bei etwas komplexeren Funktionen ist es wesentlich uebersichtlicher und besser es im Script tag zu belassen, und nur die Funktion aufzurufen.

    Gruss, Mel

  2. Moin!

    Auf meinen Websites benötige ich grundsätzlich ohnehin nur die fünf Funktionen:

    function MM_preloadImages() { //3.0
    function MM_swapImgRestore() { //3.0
    function MM_findObj(n, d) { //4.0
    function MM_swapImage() { //3.0
    function MM_openBrWindow(theURL,winName,features) { //v2.0
    function MM_showHideLayers() { //v3.0
    function MM_reloadPage(init) {  //reloads the window if Nav4 resized

    Das sind sieben Funktionen. ;)

    Dreamweaver-Javascript ist nicht schlecht. Wenn man es genau betrachtet, dann haben da echte Experten super-kompakten Code zusammengebastelt, unter Ausnutzung so ziemlich jeder Abkürzung, die man so finden kann. Sowas produziert ein vernünftig denkender Mensch nicht, weil er vielleicht nochmal ein paar Änderungen einbauen muß.

    Das Problem mit Dreamweaver-Javascripten ist: Niemand Normalsterblicher blickt da durch. Und wenn dann jemand hier im Forum schreibt, er habe dasunddas Problem mit seiner Seite, und man entdeckt dann Dreamweaver als Gestaltungsprogramm, dann geht die Bereitschaft, sich durch solchen Ekelcode zu kämpfen, ganz schnell auf Null zurück.

    Man kann es vielleicht auf folgende Formel bringen: "Wer Dreamweaver benutzt, muß selber sehen, wo er bleibt. Für irgendwas muß Macromedias Support ja gut sein." Dreamweaver produziert nämlich ziemlich konfuses Zeug, nicht nur im Javascript-Bereich. Auf alle Fälle aber steht er der hier vorherrschenden Philosophie entgegen, den Code lieber per Hand zu schreiben. (Aber das kriegen Anwender anderer WYSIWYG-Software wie Frontpage genauso ab ;) .)

    mit der DW-Funktion wird die window.open-Funktion grundsätzlich im <script>-Bereich vereinbart; wäre es auch möglich die Vereinbarung im head wegzulassen und direkt beim link mit onClick="window.open('bla.html','blafenster','width=320,blabla') zu schreiben, so dass das in einer Riesenanzahl von Browsern funktioniert (min. Opera, IE & NS >4)

    Funktionsaufrufe in Links funktionieren in einer Riesenanzahl von Browsern (natürlich nur denen, die Javascript können). Die oben angegebene Funktion "MM_openBrWindow" erledigt aber nichts anderes als drei Parameter entgegenzunehmen und an "window.open" weiterzureichen. Da kann man dann wirklich direkt "window.open" aufrufen.

    Ich empfehle folgende Vorgehensweise:
    <a href="derlink.html" target="_blank" onClick="window.open('derlink.html','irgendeinname','width=200,height=300');return false;">Irgendein Text</a>

    Vorteil: Wenn Javascript aktiv ist, wird ein neues Fenster geöffnet, wie gewünscht. Durch "return false" wird der HTML-Link aber NICHT ausgeführt, ist in diesem Fall nur Dekoration. Wenn Javascript nicht aktiv ist, wird onClick nicht ausgeführt, aber der HTML-Link. Und der führt bei Fenster-Browsern immerhin noch zu einem neuen Fenster (ohne daß man auf dessen Größe Einfluß nehmen könnte), und bei Browsern ohne Fenster (wie z.B. Lynx) wird immerhin noch der Link verfolgt.

    So machst du auf einen Schlag eine Menge Leute glücklich.

    - Sven Rautenberg

    1. Hi,

      beim Öffnen von JavaScript-Fenstern sollte man immer die Option ',resizable=yes' mit angeben, da der Anwender im Browser die Standardschriftgröße variieren kann (z. B. IE: Ansicht > Schriftgrad) und bei fester Fenstergröße evtl. einen Teil nicht lesen kann.

      Ebenso wünschenswert, aber problematisch ist die Option ',scrollbars=yes', der IE zeigt dann allerdings auch eine (leere) Scroll-Leiste an, wenn der Inhalt keine benötigt. Um dies zu verhindern muß in der aufgerufenen Datei
      <body style="overflow:auto;">
      stehen.

      Wünsche noch viel Spaß mit JavaScript.