0

我有一个非常典型的书签代码,它在所有浏览器中都非常适合我。但是,当我将此代码放入 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 处理程序的代码是否有任何限制?

谢谢!丹尼尔

4

1 回答 1

1

通过在变量声明前添加 window.AppD 解决。

Andrew Noyes 在另一个问题中提供的解决方案:

在内联 onclick 处理程序中可以做什么有任何限制吗?

于 2009-05-14T02:07:31.590 回答