window.external.AddFavorite() unter Windows XP SP2
Orlando
- javascript
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
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 ...
.... das dagegen funktioniert.
Grüße aus Nürnberg
Tobias
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
Hallo!
http://skop.net/self/window.external.AddFavorite.html
.... das dagegen funktioniert.
Bei mir auch ;-)
Grüße
Andreas
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
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
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
Korrektur:
document.all.xpsp2htm.innerHTML = HTMFav;
innerText war gemeint, nicht innerHTML.
Grüße
Roland
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
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
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
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/)
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
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/)
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
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.