我有一个非常典型的书签代码,在所有浏览器中都能很好地适用于我。 但是,当我将此代码放入HTML的元素onClick处理程序时,它在IE(6,7或8)中不起作用。
这是代码:
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');
}
)();
压缩为书签,如下所示:
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');})();
这完美无缺。 我已经取出了javascript:前缀,并将其放入元素的onClick:
<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');})();" />
这也很有效,除了在IE中,bk.js中的代码(被注入的脚本)抱怨变量AppD没有被定义......
为什么会发生这种情况的任何想法? 可以在onClick处理程序中放置代码有什么限制吗?
谢谢! 丹尼尔
答案 0 :(得分:1)
通过在变量声明前面添加window.AppD来解决。
Andrew Noyes在另一个问题中提供的解决方案:
Are there any limitations to what can be done in an inline onclick handler?