javascript-function - unendlicher Ladebalken

  • ich bin im moment dabei bisschen was mit javascript zu proggen, dabei ist mir aufgefallen, dass Firefox ein problem hat wenn man per javascript eine neue seite generiert.

    Zitat

    '<'img src="bilder/button_berechnen.gif" width="150" height="75" onclick="javascript: writeJS()" '/>'

    hab das hier wie folgt gemacht, immer wenn ich auf das bild klicke, wird zwar die seite generiert und richtig angezeigt, allerdings ladet der ladebalken unendlich lange weiter und bei der maus ist auch das Sanduhrzeichen. Hab das dann mit 4 weiteren browsern getest und dort tritt dies nicht auf.
    vielleicht kennt jemand eine problemlösung dafür oder dieser schönheitsfehler wird in den kommenden versionen beseitigt.

    mfg

  • Zitat von Tosarktos

    ich bin im moment dabei bisschen was mit javascript zu proggen, dabei ist mir aufgefallen, dass Firefox ein problem hat wenn man per javascript eine neue seite generiert.


    Nö, nicht wirklich. Wenn man's richtig macht.

    Code
    '<'img src="bilder/button_berechnen.gif" width="150" height="75" onclick="javascript: writeJS()" '/>'
    Zitat von Tosarktos

    Hab das dann mit 4 weiteren browsern getest und dort tritt dies nicht auf.


    Mit welchen denn? Rein interessehalber. : )

    Zitat von Tosarktos

    vielleicht kennt jemand eine problemlösung dafür oder dieser schönheitsfehler wird in den kommenden versionen beseitigt.


    Ich bezweifle das Mozilla diese Quelltext-Fehlerkorrektur in einer der nächsten Versionen implementiert. Denn genau das machen Deine anderen Browser. Eine Fehlerkorrektur.

    Bei allen Eventhandlern (zu erkennen an "onsonstwas=") wird kein "javascript:foo" rein geschrieben. Es ist direkt klar, dass es sich um einen Scriptbereich handelt. Das "javascript:" ist ein Kunstgriff der im Grunde nur bei dem Tag <a> vorkommt um über das Attribut "href" ein Skript auszulösen.

    Ich hoffe ich hab das verständlich erklärt.

  • IE8 Beta2, Safari, Opera, Google Chrome

    waren die anderen, dalso durchaus die gängigsten ;)

    javascript: sorgt ja dafür, dass eine leere seite generiert wird wo nix drinnen ist....

    Was soll ich jetzt anderst machen, damit es funktioniert ?

  • 1.) Safari und Chrome basieren beide auf Webkit und verhalten sich daher auch identisch. Die doppelte Prüfung kannst Du Dir also schenken. ; )

    2.) Nein, "javascript:" öffnet keine neue Seite. Wenn es ein Browser macht, dann nur weil er nicht wusste, was Du ihm sagen wolltest und eine neue Seite als Versuch irgendwas zu machen durchzieht.

    Noch mal zum Verständnis, etwas ausführlicher. javascript: ist im Grunde eine Protokoll-Notation. Was ein Protokoll ist, weißt Du? http:? ftp:? Steht auch immer oben in der Adresszeile. ; )

    Wenn Du z.B. auf der Seite http://www.meineseite.de/kontakt/kontakt.html folgenden Link schreibst:

    Code
    <a href="../index.html">Startseite</a>


    ...dann vervollständigt wird der Browser eine Autovervollständigung für Dich durchführen, wenn Du auf den Link klickst und dich nach http://www.meineseite.de/index.html schicken.

    Diese Vereinfachung um relative Angaben zu machen ist in HTML ja so vorgesehen gewesen. Aber wenn Du NICHT auf die selben Domain (http://www.meineseite.de) verlinken willst, muss Du ja sowas schreiben:

    Code
    <a href="http://dieseiteeinesfreundes.de/index.html">Seite vom Sven</a>


    Du siehst hier scon das http: im href. Hiermit wird dem Browser gesagt das er eine Webseite laden soll. Über das http-Protokoll. Du könntest auch eine ftp-Verbindung darüber aufrufen:

    Code
    <a href="ftp://ftp.mozilla.org/firefox.exe">Firefox 3.0.5</a>

    Vor dem Doppelpunkt steht im href der Name des Protokolls, dass der Browser aufrufen soll.

    Würdest Du z.B. auf der Seite http://www.meineseite.de/index.html folgenden Link schreibst:

    Code
    <a href="meinejavascriptfunktion()">Startseite</a>


    ... dann würde der Browser versuchen eine Autovervollständigung durchzuführen und Dich versuchen nach http://www.meineseite.de/meinejavascriptfunktion() zu schicken. Das ist natürlich keine gültige Adresse und würde nur Fehler produzieren. Und außerdem willst Du ja eigentlich die Funktion aufrufen und keine andere Seite.

    Daher hat man sich darauf geeinigt, dass man über einen Kunstgriff die Möglichkeit einbaut, trotzdem Javascript auszuführen. Und dafür hat man die Protokoll-Schreibweise für javascript: eingeführt. Sie sagt dem Browser: Achtung! Das ist kein Link was in dem href steht! Sondern Javascript! Bitte behandel alles was nach javascript: kommt als wenn es über onclick ausgelöst worden wäre!

    Im onclick hingegen kommt NIEMALS ein Protokoll vor. Auch keine Adressen. Auch wird darüber keine Seite aufgerufen. Im onclick (oder auch allen anderen Eventhandlern) gibt es exklusiv NUR Javascript. Daher wird dort auch kein javascript: geschrieben.

    Wenn Du ein neues Fenster/Tab haben willst wird das über window.open() geöffnet.

    Also entweder:

    Code
    <a href="javascript:macheinpopupauf();"><img></a>


    oder

    Code
    <img onclick="macheinpopupauf();">


    Und in der macheinpopupauf() nutzt Du dann window.open().

    Ich hoffe Du hast das jetzt verstanden. : )