Fehler im MSIE
Beat
- javascript
Hallo
Ich habe einen Fehler im MSIE7.
Fehler Zeile 45 = Ende CodeBlock
Vielleicht kann mir jemand sagen, wo der Hund begraben liegt
BTW würde mich eure Meinung zu diesem kleinen Social Bookmark Script interessieren.
Stichwort Codequalität.
(die window.onload Funktion wird noch ersetzt.)
Ich fand AddThis wegen dem ganzen Tracking zum kotzen.
Hier wird ein SpriteImage verwendet.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>BEISPIEL</title>
<style type="text/css">
</style>
<script type="text/javascript">
var bookmarkbar = {
serv: [
['twitter', 'http://twitthis.com/twit?url=','&title=',''],
['google', 'http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=','&title=',''],
['bookmarks.ch','http://www.bookmarks.ch/add.html?w=','&title=',''],
['facebook','http://www.facebook.com/sharer.php?u=','',''],
['delicious','http://www.icio.de/add.php?url=','&title=',''],
['myspace', 'http://www.myspace.com/Modules/PostTo/Pages/?l=2&u=','&title=',''],
['digg', 'http://digg.com/submit?phase=2&url=','&title=',''],
['webnews', 'http://www.webnews.de/einstellen?url=','',''],
['yigg', 'http://www.yigg.de/neu?exturl=','&title=',''],
['live.com','https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url=','',''],
['mister-wong','http://www.mister-wong.de/index.php?action=addurl&bm_url=','&bm_description=',''],
['yahoo', 'http://myweb2.search.yahoo.com/myresults/bookmarklet?u=','&t=',''],
],
init: function(){
this.href = encodeURIComponent(location.href);
// this.href = encodeURIComponent('http://forum.de.selfhtml.org/my/?t=192863&m=1287574');
this.title =
encodeURIComponent(document.getElementsByTagName('head')[0].getElementsByTagName('title')[0].innerHTML);
document.getElementsByTagName('style')[0].firstChild.data +=
'.bookmarkbar { height:23px; width:253px; margin:0; padding:0; list-style:none; background:#ccc url(social_bookmark.png);}\n'
+'.bookmarkbar li {float:left; width:21px; height:23px; margin:0; padding:0; }\n'
+'.bookmarkbar a {display:block; overflow:hidden; text-indent:-500px;}\n'
+'.bookmarkbar li:hover {outline:1px solid red;}\n';
var t='';
for(var i=0; i<this.serv.length;i++ ){
t += '<li><a href="'
+ this.serv[i][1]+this.href
+ (this.serv[i][2] ? this.serv[i][2]+this.title : '')
+ (this.serv[i][3] ? this.serv[i][3] : '' )
+ '" '
+ 'title="'+this.serv[i][0]+'" '
+ '>'+this.serv[i][0]+'</a></li>';
}
document.getElementsByClassName('bookmarkbar')[0].innerHTML += t ;
},
}
window.onload = function(){ bookmarkbar.init() };
</script>
</head>
<body>
<ul class="bookmarkbar"></ul>
</body>
</html>
mfg Beat
Hallo,
.
.
.
['live.com','https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url=','',''],
['mister-wong','http://www.mister-wong.de/index.php?action=addurl&bm_url=','&bm_description=',''],
['yahoo', 'http://myweb2.search.yahoo.com/myresults/bookmarklet?u=','&t=',''],
Mich dünkt, dieses Komma ^ ist zuviel.
Viele Grüße,
Jörg
Äh...hätte ich mal die Vorschau benutzt :)
Ich meinte das abschliessende Komma hinter dem yahoo-Array.
Hallo,
.
.
.
['live.com','https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url=','',''],
['mister-wong','http://www.mister-wong.de/index.php?action=addurl&bm_url=','&bm_description=',''],
['yahoo', 'http://myweb2.search.yahoo.com/myresults/bookmarklet?u=','&t=',''],Mich dünkt, dieses Komma ^ ist zuviel.
OK. Durch die Entfernung dieses Fehlers ist nun ein anderer sichtbar geworden.
document.getElementsByTagName('style')[0].firstChild.data +=
MSIE motzt: is Null or not an object.
wenn ich das ändere:
document.getElementsByTagName('style')[0].innerHTML +=
dann habe ich einen 'unknown runtime error'
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Hallo,
document.getElementsByTagName('style')[0].firstChild.data +=
MSIE motzt: is Null or not an object.
wenn ich das ändere:
document.getElementsByTagName('style')[0].innerHTML +=
dann habe ich einen 'unknown runtime error'
Ich meine mich zu erinnern, dass der IE mit "firstChild" insofern Zicken macht, als dass er Zeilenumbrüche, Leerzeichen usw. als eigenständige Textknoten auffasst. "firstChild" könnte sich daher auf das falsche Element beziehen.
Warum dann allerdings innerHTML nicht geht ist komisch.
Was sagt denn z.b. ein:
var styles = document.getElementsByTagName('style');
alert(styles.length);
?
Ich nochmal.
Warum dann allerdings innerHTML nicht geht ist komisch.
Gar nicht so komisch offenbar...
innerHTML - "The property is read/write for all objects except the following, for which it is read-only: COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR."
=> Also kein innerHTML für das Style-Element. Musst Du mit den "echten" DOM-Methoden machen.
Was sagt denn z.b. ein:
var styles = document.getElementsByTagName('style');
alert(styles.length);
"1"
Nee das Problem ist \_schreiben\_.
egal ob mit innerHTML oder mit DOM Methoden.
<http://www.quirksmode.org/dom/w3c_css.html>
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Hallo,
Ich meinte das abschliessende Komma hinter dem yahoo-Array.
Richtig, und es fehlen auch Semikolons, z.B. in den letzten beiden Zeilen (nicht ganz so wichtig).
Die Pluszeichen bei t an den Zeienanfängen sind nicht gut (gehören ans Zeilenende).
Auch folgendes wäre nämlich gültige Syntax, ist aber wohl nicht gemeint:
t += '<li><a href="';
+ this.serv[i][1]+this.href;
+ (this.serv[i][2] ? this.serv[i][2]+this.title : '');
+ (this.serv[i][3] ? this.serv[i][3] : '' );
+ '" ';
+ 'title="'+this.serv[i][0]+'" ';
+ '>'+this.serv[i][0]+'</a></li>';
Der Parser muss hier also raten, was es wohl sein soll.
Ansonsten:
Gruß, Don P
Hallo,
BTW würde mich eure Meinung zu diesem kleinen Social Bookmark Script interessieren.
Stichwort Codequalität.
OK:
»» this.title =
> encodeURIComponent(document.getElementsByTagName('head')[0].getElementsByTagName('title')[0].innerHTML);
Den Fenstertitel bekommst du viel einfacher mit document.title
.
Gruß, Don P
»» this.title =
encodeURIComponent(document.getElementsByTagName('head')[0].getElementsByTagName('title')[0].innerHTML);
> Den Fenstertitel bekommst du viel einfacher mit `document.title`{:.language-javascript}.
Danke.
MSIE hat definitiv mit beiden versionen Probleme
document.getElementsByTagName('style')[0].firstChild.data +=
(NULL or not an object)
oder
document.getElementsByTagName('style')[0].innerHTML +=
(unknown error)
Also der Zugriff auf das style Element im head ist hier gemeint.
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Ich habe jetzt
document.getElementsByTagName('style')[0].firstChild.data +=
'.....';
ersetzt durch:
var s = document.createElement('style');
s.type = 'text/css';
s.innerHTML = '#bookmarkbar { height:23px; width:253px; margin:0; padding:0; list-style:none; background:#ccc url(social_bookmark.png);}\n'
+'#bookmarkbar li {float:left; width:21px; height:23px; margin:0; padding:0; }\n'
+'#bookmarkbar a {display:block; overflow:hidden; text-indent:-500px;}\n'
+'#bookmarkbar li:hover {outline:1px solid red;}\n';
document.getElementsByTagName('head')[0].appendChild(s);
~~~das erscheint mir konzeptionell besser.
Das MSIE Problem bleibt aber. Bei
s.innerHTML
streikt er mit einem unknown error.
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Das MSIE Problem bleibt aber. Bei
s.innerHTML
streikt er mit einem unknown error.
Das ist ja auch kein HTML innerhalb von style.
Struppi.
Das MSIE Problem bleibt aber. Bei
s.innerHTML
streikt er mit einem unknown error.Das ist ja auch kein HTML innerhalb von style.
Falsche Fehleranalyse.
MSIE kann schlicht das sytyle Element nicht beschreiben.
Hier die Dom-Methoden Version.
var s = document.createElement('style');
s.type = 'text/css';
var x = document.createTextNode(
'#bookmarkbar { height:23px; width:253px; margin:0; padding:0; list-style:none; background:#ccc url(social_bookmark.png);}\n'
+'#bookmarkbar li {float:left; width:21px; height:23px; margin:0; padding:0; }\n'
+'#bookmarkbar a {display:block; overflow:hidden; text-indent:-500px;}\n'
+'#bookmarkbar li:hover {outline:1px solid red;}\n');
s.appendChild(x);
document.getElementsByTagName('head')[0].appendChild(s);
same error
mfg Beat