2009-05-14 4 views
0

Ich habe einen ziemlich typischen Bookmarklet-Code, der perfekt für mich in allen Browsern funktioniert. Wenn ich jedoch diesen Code nehme und ihn in den onClick-Handler von HTML einfüge, funktioniert er nicht in IE (6, 7 oder 8).Warum funktioniert dieser Bookmarklet-JS-Code nicht, wenn er in einen Onclick-Handler eingefügt wird?

Dies ist der Code:

javascript: (
    function(){ 
     function l(i,u){ 
      var d=document; 
      var s; 
      try{ 
       s=d.standardCreateElement('script'); 
      }catch(e){} 
      if(typeof(s)!='object') 
       s=d.createElement('script'); 
      try{ 
       s.type='text/javascript'; 
       s.src='http://{Domain}/bk/' + u; 
       s.id='s_' + i; 
       d.getElementsByTagName('head')[0].appendChild(s); 
      }catch(e){ 
      } 
     } 
     AppD = '{Domain}';   
     l('b', 'bk.js'); 
    } 
    )(); 

als Bookmarklet Druck nach unten, die wie folgt aussieht:

javascript:function(){function l(i,u){var d=document;var s;try{s=d.standardCreateElement('script');}catch(e){} if(typeof(s)!='object') s=d.createElement('script'); try{s.type='text/javascript';s.src='http://{Domain}/bk/' + u;s.id='s_' + i;d.getElementsByTagName('head')[0].appendChild(s);}catch(e){}}AppD = '{Domain}';l('b', 'bk.js');})(); 

Und das funktioniert perfekt. Ich habe das Javascript genommen: Präfix, und es in ein OnClick des Elements setzen:

<img onclick="function(){function l(i,u){var d=document;var s;try{s=d.standardCreateElement('script');}catch(e){} if(typeof(s)!='object') s=d.createElement('script'); try{s.type='text/javascript';s.src='http://{Domain}/bk/' + u;s.id='s_' + i;d.getElementsByTagName('head')[0].appendChild(s);}catch(e){}}AppD = '{Domain}';l('b', 'bk.js');})();" /> 

und das funktioniert auch gut, außer als in IE, der Code innerhalb bk.js (das Skript, das injiziert wird) beschwert sich, dass Variable AppD nicht definiert ist ...

Irgendwelche Ideen, warum das passiert?
Gibt es irgendwelche Einschränkungen für den Code, den man in einen onClick-Handler geben kann?

Danke! Daniel

Antwort

Verwandte Themen