J'ai un code bookmarklet assez typique qui fonctionne parfaitement pour moi dans tous les navigateurs. Cependant, lorsque je prends ce code et que je le mets dans un gestionnaire onClick d'un élément HTML, cela ne fonctionne pas dans IE (6, 7 ou 8).Pourquoi ce code JS bookmarklet ne fonctionne-t-il pas lorsqu'il est placé dans un gestionnaire onclick?
Voici le 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');
}
)();
comprimé vers le bas comme un bookmarklet, qui ressemble à:
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');})();
Et cela fonctionne parfaitement. J'ai pris le javascript: préfixe, et le mettre dans un onClick de l'élément:
<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');})();" />
Et ça fonctionne bien aussi, sauf que dans IE, le code à l'intérieur bk.js (le script qui est injecté) se plaint que la variable AppD n'est pas définie ...
Des idées pourquoi cela se passe-t-il?
Y at-il une limite au code que l'on peut mettre dans un gestionnaire onClick?
Merci! Daniel