簡體   English   中英

當放入onclick處理程序時,為什么此小書簽JS代碼不起作用?

[英]Why does this bookmarklet JS code not work when put in an onclick handler?

我有一個非常典型的bookmarklet代碼,它在所有瀏覽器中都非常適合我。 但是,當我將這段代碼放入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處理程序中的代碼有任何限制嗎?

謝謝! 丹尼爾

通過在變量聲明之前添加window.AppD來解決。

Andrew Noyes在另一個問題中提供的解決方案:

內聯onclick處理程序中可以執行的操作是否有任何限制?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM