JavaScript自動點擊鏈接 防止繞過瀏覽器訪問

做支付寶帳號登錄,需要做一個效果,就是打開鏈接頁面的時候,不需要點擊鏈接,直接跳到支付寶登錄頁面。也就是說,需要做一個自動點擊鏈接的效果。

基本都是用這個:

   1: <body onLoad="autoclick('auto')">
   2: <a id='auto' href=".$url."><img border='0' src='images/alipaylog.gif' />a>
   3: body>
   4: <script type="text/javascript">
   1:  
   2: function autoclick(){
   3:     lnk = document.getElementById("auto");
   4:     lnk.click();
   5: }
script>

這個就IE下可以用,其它瀏覽器都不可以。還轉得鋪天蓋地呢,浪費大家搜索的時間。

下面這個還比較靠譜,先看看吧:

   1: <body onLoad="autoclick('auto')">
   2: <a id='auto' href=".$url."><img border='0' src='images/alipaylog.gif' />a>
   3: body>
   4: <script type="text/javascript">
   1:  
   2: function autoclick(name)
   3: {   
   4:     if(document.all)   
   5:     {   
   6:         //alert(1);
   7:           document.getElementById(name).click();   
   8:     }   
   9:       else   
  10:     {   
  11:         var evt = document.createEvent("MouseEvents");   
  12:            evt.initEvent("click", true, true);   
  13:         //alert(2);
  14:         document.getElementById(name).dispatchEvent(evt);   
  15:       }   
  16: } 
script>

這個在Chrome和IE下都能正常,但是在Firefox下就不能了。但總比第一個要優秀。

dispatchEvent在Firefox下是有問題的,下面是解決方案:

   1: document.getElementById("me").onclick = function() {
   2:     var card = document.getElementById("card");
   3:     if(document.createEvent){
   4:         var ev = document.createEvent('HTMLEvents');
   5:         ev.initEvent('click', false, true);
   6:         card.dispatchEvent(ev);
   7:     }
   8:     else 
   9:         card.click();
  10: }

其中 card元素是綁有事件的元素。me元素是想通過點擊 me元素 來調用 card的click事件的元素。。。。

問題的重點在於 firefox 的js引擎需要先創建一個事件:var ev = document.createEvent('HTMLEvents');

然後將事件指定爲 click事件:ev.initEvent('click', false, true);

最後將事件付給card元素:card.dispatchEvent(ev);

   1: card = document.getElementById('id');
   2:  
   3: var ev = document.createEvent('HTMLEvents');
   4: ev.initEvent('click', false, true);
   5:  
   6: card.dispatchEvent(ev);

由此可見,dispatchEvent 是事件委託中的最後一步,將委託事件與調用的元素鏈接起來,達到調用這個元素的事件的效果。

最後推薦用 input 來實現,下面是最終解決方案:

   1: <body onLoad="autoclick('auto2')">
   2: <input id="auto2" type="hidden"  onClick="javascript:location.href = '&lt;?=$url?>' " />
   3: body>
   4: <script type="text/javascript">
   1:  
   2: function autoclick(name)
   3: {   
   4:     if(document.all)   
   5:     {   
   6:         //alert(1);
   7:           document.getElementById(name).click();   
   8:     }   
   9:       else   
  10:     {   
  11:         var evt = document.createEvent("MouseEvents");   
  12:            evt.initEvent("click", true, true);   
  13:         //alert(2);
  14:         document.getElementById(name).dispatchEvent(evt);   
  15:       }   
  16: } 
script>
發佈了149 篇原創文章 · 獲贊 6 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章