Javascript 为什么这个bookmarklet JS代码在放入onclick处理程序时不起作用?

Javascript 为什么这个bookmarklet JS代码在放入onclick处理程序时不起作用?,javascript,events,onclick,bookmarklet,Javascript,Events,Onclick,Bookmarklet,我有一个非常典型的bookmarklet代码,它在所有浏览器中都非常适合我。 然而,当我将这段代码放入HTML的元素onClick处理程序中时,它在IE6、7或8中不起作用 代码如下: javascript: ( function(){ function l(i,u){ var d=document; var s; try{ s=d.standardCreateElem

我有一个非常典型的bookmarklet代码,它在所有浏览器中都非常适合我。 然而,当我将这段代码放入HTML的元素onClick处理程序中时,它在IE6、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');
    }   
    )();
压缩为bookmarklet,如下所示:

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处理程序的代码有任何限制吗

谢谢!
Daniel

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

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