黑帽联盟

 找回密码
 会员注册
查看: 2398|回复: 0

[其它] JavaScript自动点击链接 防止绕过浏览器访问的方法

[复制链接]

148

主题

9

听众

337

积分

版主

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    擦汗
    2018-6-6 11:33
  • 签到天数: 348 天

    [LV.8]以坛为家I

    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">


    5. function autoclick(){

    6. lnk = document.getElementById("auto");

    7. lnk.click();

    8.   }

    9. </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:

    5. function autoclick(name)

    6. {  

    7.   if(document.all)  

    8.   {  

    9.     //alert(1);

    10.      document.getElementById(name).click();  

    11.   }  

    12.    else  

    13.   {  

    14.     var evt = document.createEvent("MouseEvents");  

    15.       evt.initEvent("click", true, true);  

    16.     //alert(2);

    17.     document.getElementById(name).dispatchEvent(evt);  

    18.    }  

    19. }

    20. </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);
    card = document.getElementById('id');
    var ev = document.createEvent('HTMLEvents');
    ev.initEvent('click', false, true);
    card.dispatchEvent(ev);
    由此可见,dispatchEvent 是事件委托中的最后一步,将委托事件与调用的元素链接起来,达到调用这个元素的事件的效果。
    最后推荐用 input 来实现,下面是最终解决方案:
    1. <body onLoad="autoclick('auto2')">

    2. <input id="auto2" type="hidden" onClick="javascript:location.href = '<?=$url?>' " />

    3. </body>

    4. <script type="text/javascript">  1:

    5. function autoclick(name)

    6. {  

    7.   if(document.all)  

    8.   {  

    9.     //alert(1);

    10.      document.getElementById(name).click();  

    11.   }  

    12.    else  

    13.   {  

    14.    var evt = document.createEvent("MouseEvents");  

    15.      evt.initEvent("click", true, true);  

    16.     //alert(2);

    17.     document.getElementById(name).dispatchEvent(evt);  

    18.    }  
    19. }
    20. </script>
    复制代码
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部