Orlando: window.external.AddFavorite() unter Windows XP SP2

Werte Gemeinde,

mittels window.external.AddFavorite() lassen sich im Internet Explorer bekanntlich Favoriten-Einträge vornehmen – dies scheitert jedoch bei einigen Benutzern.

Das Problem ließ sich bereits ganz gut auf Windows XP Service Pack 2 eingrenzen, jetzt will ich’s allerdings genau wissen, da eventuell auch andere Systeme davon betroffen sind. Wenn ihr also bitte testen würdet, ob das Hinzufügen in folgendem Beispiel klappt:

http://skop.net/self/window.external.AddFavorite.html

Falls kein neuer Eintrag namens „Test window.external.AddFavorite“ angelegt werden konnte, welches System mit welchem Service Pack und welche IE-Version verwendet ihr? Danke!

Grüße
Roland

  1. Hallo Roland,

    Das Problem ließ sich bereits ganz gut auf Windows XP Service Pack 2 eingrenzen,

    das Beispiel im Archiv funktioniert bei mir (IE6,winXP,SP2) - wie bei Andreas - nicht ...

    http://skop.net/self/window.external.AddFavorite.html

    .... das dagegen funktioniert.

    Grüße aus Nürnberg
    Tobias

    1. Hallo Tobias,

      Das Problem ließ sich bereits ganz gut auf Windows XP Service Pack 2 eingrenzen,
      das Beispiel im Archiv funktioniert bei mir (IE6,winXP,SP2) - wie bei Andreas - nicht ...

      http://skop.net/self/window.external.AddFavorite.html
      .... das dagegen funktioniert.

      Interessant, danke. Dann werde ich wohl einen zweiten Test basteln müssen, um das Problem weiter einzugrenzen. Toll, dass das Service Pack so wunderbar ausführlich dokumentiert ist …

      Grüße
      Roland

    2. Hallo!

      http://skop.net/self/window.external.AddFavorite.html
      .... das dagegen funktioniert.

      Bei mir auch ;-)

      Grüße
      Andreas

      --
      SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
      1. Hallo Andreas,

        http://skop.net/self/window.external.AddFavorite.html
        .... das dagegen funktioniert.
        Bei mir auch ;-)

        Danke euch beiden, das hat mir weitergeholfen.

        Ich habe jetzt eine andere Lösung gefunden, allerdings stellt der IE 6 einen Teil der Seite nicht dar, sobald ein a-Element per setAttribute() um ein href-Attribut ergänzt wird. Scheiß Browser.

        HTML-Auszug:

        <ul>  
          <li>HTML-Sidebar: <a id="xpsp2htm" title="SELFHTML: HTML">Diese Installationsvariante …</a></li>  
          <li>CSS-Sidebar: <a id="xpsp2css" title="SELFHTML: CSS">Diese Installationsvariante …</a></li>  
        </ul>
        

        Relevante Script-Zeilen:

          
        document.getElementById("xpsp2htm").setAttribute("href", HTMFav);  // löst den Fehler aus  
        document.getElementById("xpsp2htm").firstChild.nodeValue = HTMFav;
        

        HTMLFav enthält den Wert

        javascript:void(_search=open('…pfad…/navigation/sidebars/html.htm', '_search'))

        Ergebnis im IE 5 (so soll es sein):

        Ergebnis im IE 6:

        Auch die Angabe eines dritten Parameters bring keine Besserung. Scrollt man jedoch an den Beginn der Seite und dann wieder hinunter, wird alles korrekt dargestellt. Ist das ein bekannter Rendering-Bug? Und warum passieren solche Dinge immer mir? Wah! ;-)

        Grüße
        Roland

        1. Hi,

          Ich habe jetzt eine andere Lösung gefunden, allerdings stellt der IE 6 einen Teil der Seite nicht dar, sobald ein a-Element per setAttribute() um ein href-Attribut ergänzt wird. Scheiß Browser.

          und was ist, wenn Du einfach ein anderes Element nebst onclick nimmst? Und dabei sicherheitshalber außer dem Cursor keinen optischen hover-Effekt einbaust?

          freundliche Grüße
          Ingo

          1. Hallo Ingo,

            Ich habe jetzt eine andere Lösung gefunden, allerdings stellt der IE 6 einen Teil der Seite nicht dar, sobald ein a-Element per setAttribute() um ein href-Attribut ergänzt wird.

            und was ist, wenn Du einfach ein anderes Element nebst onclick nimmst?

            Das funktioniert zwar hinsichtlich des Rendering-Bugs, allerdings können IE-Nutzer die Sidebars damit nicht mehr live ausprobieren, weswegen ich doch lieber das href-Attribut einsetzen würde.

            Außerdem habe ich soeben bemerkt, dass es nicht an setAttribute(), sondern an

            document.getElementById("xpsp2htm").firstChild.nodeValue = HTMFav;

            liegt. Ein identischer Zugriff per

            document.all.xpsp2htm.innerHTML = HTMFav;

            zeigt den gleichen Fehler.

            Grüße
            Roland

            1. Korrektur:

              document.all.xpsp2htm.innerHTML = HTMFav;

              innerText war gemeint, nicht innerHTML.

              Grüße
              Roland

        2. Hallo,

          document.getElementById("xpsp2htm").firstChild.nodeValue = HTMFav; // löst den Fehler aus

          Gleich haben wir’s … das Problem besteht schlichtweg darin, dass das Script per

          window.onload = xpsp2uris;

          aufgerufen wird und der IE 6 damit ein Timing-Problem hat. Mit einer kurzen Verzögerung klappt die Änderung der Knoten wie gewünscht:

          <body onload="window.setTimeout('xpsp2uris()', 1000);">

          Lässt sich diese Verzögerung auch per window.onload herbeiführen, ohne Funktionen gegenseitig aufrufen zu müssen? Bei

          window.onload = window.setTimeout("xpsp2uris()", 1000);

          meckert der IE und meint „Fehler: nicht implementiert“. Das kann so auf keinen Fall stimmen. ;-) Er tut’s nämlich letztendlich doch, allerdings erst nach der genannten Warnung.

          Grüße
          Roland

          1. Hi,

            Gleich haben wir’s

            *g*

            window.onload = window.setTimeout("xpsp2uris()", 1000);

            meckert der IE und meint „Fehler: nicht implementiert“.

            window.onload = function(){window.setTimeout("alert('ok')", 1000);}
            funktioniert zumindest in meinem IE.

            freundliche Grüße
            Ingo

            1. Hallo Ingo,

              Gleich haben wir’s
              *g*

              „Immerhin bin ich IT-Profi™“. ;-)

              window.onload = function(){window.setTimeout("alert('ok')", 1000);}
              funktioniert zumindest in meinem IE.

              Aha, sehr schön.

              window.onload = function(){window.setTimeout("xpsp2uris()", 100);}

              Funzt! Ist eingecheckt! *tröt*

              Danke. :-)

              Grüße
              Roland

        3. Ich habe jetzt eine andere Lösung gefunden, allerdings stellt der IE 6 einen Teil der Seite nicht dar, sobald ein a-Element per setAttribute() um ein href-Attribut ergänzt wird. Scheiß Browser.

          Das hatten wir doch vor kurzem schonmal, der IE meckert oder kann setAttribute nicht, bei Elementen, die auch per [objekt].eigenschaft gesetzt werden können.
          (wenn ich das richtig verstanden hate)

          Relevante Script-Zeilen:

          document.getElementById("xpsp2htm").setAttribute("href", HTMFav);  // löst den Fehler aus
          document.getElementById("xpsp2htm").firstChild.nodeValue = HTMFav;

          
          >   
          > HTMLFav enthält den Wert  
          >   
          > `javascript:void(_search=open('…pfad…/navigation/sidebars/html.htm', '_search'))`{:.language-javascript}  
          >   
          > Ergebnis im IE 5 (so soll es sein):  
            
          Einfach so:  
            
          window.onload = function()  
          {  
          var HTMFav = "javascript:void(\_search=open('…pfad…/navigation/sidebars/html.htm', '\_search'))";  
          document.getElementById("xpsp2htm").href =  
          document.getElementById("xpsp2htm").firstChild.data =  
          HTMFav;  
          }  
            
            
          Struppi.
          
          -- 
          [Javascript ist toll](http://javascript.jstruebig.de/)
          
          1. Hallo Struppi,

            window.onload = function()
            {
            var HTMFav = "javascript:void(_search=open('…pfad…/navigation/sidebars/html.htm', '_search'))";
            document.getElementById("xpsp2htm").href =
            document.getElementById("xpsp2htm").firstChild.data =
            HTMFav;
            }

            Danke, Bei folgendem Code tritt der Fehler jedoch auf:

            window.onload = function () {  
              if ((typeof window.external == "object") && (typeof window.external.AddFavorite != "undefined")) {  
                document.getElementById("xpsp2htm").href = HTMFav;  
                document.getElementById("xpsp2htm").firstChild.data = HTMFav;  
                document.getElementById("xpsp2css").href = CSSFav;  
                document.getElementById("xpsp2css").firstChild.data = CSSFav;  
              }  
            }
            

            setTimeout() ist also unbedingt erforderlich, weshalb ich den Bug mit Ingos Variante umgehe:

            function xpsp2uris () {  
              if ((typeof window.external == "object") && (typeof window.external.AddFavorite != "undefined")) {  
                document.getElementById("xpsp2htm").setAttribute("href", HTMFav);  
                document.getElementById("xpsp2htm").firstChild.nodeValue = HTMFav;  
                document.getElementById("xpsp2css").setAttribute("href", CSSFav);  
                document.getElementById("xpsp2css").firstChild.nodeValue = CSSFav;  
              }  
            }  
              
            window.onload = function () {  
              window.setTimeout("xpsp2uris()", 150);  
            }
            

            Einen Schönheitswettbewerb will ich mit meinem Spaghetti-Code ohnehin nicht gewinnen. ;-)

            Grüße
            Roland

            1. Danke, Bei folgendem Code tritt der Fehler jedoch auf:

              window.onload = function () {

              if ((typeof window.external == "object") && (typeof window.external.AddFavorite != "undefined")) {
                  document.getElementById("xpsp2htm").href = HTMFav;
                  document.getElementById("xpsp2htm").firstChild.data = HTMFav;
                  document.getElementById("xpsp2css").href = CSSFav;
                  document.getElementById("xpsp2css").firstChild.data = CSSFav;
                }
              }

              
              >   
                
              Bei mir nicht.  
                
              
              > setTimeout() ist also unbedingt erforderlich, weshalb ich den Bug mit Ingos Variante umgehe:  
                
                
              Irgendwas muss anders sein bei dir, bei mir läuft's ohne setTimeout (IE 6 SP2)  
                
              Struppi.
              
              -- 
              [Javascript ist toll](http://javascript.jstruebig.de/)
              
              1. Hallo Struppi,

                setTimeout() ist also unbedingt erforderlich

                Irgendwas muss anders sein bei dir, bei mir läuft's ohne setTimeout (IE 6 SP2)

                Meine IE-Version ist 6.0.2800.1106 (SP1). Hm, hast du mit der aktuellen SVN-Version getestet?

                Grüße
                Roland

                1. Meine IE-Version ist 6.0.2800.1106 (SP1). Hm, hast du mit der aktuellen SVN-Version getestet?

                  6.0.2900.2180

                  keine Ahnung wann ich den letzten update gemacht hatte.

                  Struppi.