黑帽联盟

 找回密码
 会员注册
查看: 1808|回复: 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>
    复制代码
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

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