浏览 15391 次
锁定老帖子 主题:不会被拦截的JS打开新窗口的方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-19
最后修改:2012-02-06
之前利用隐藏form提交打开新窗口的方式,被chrome干掉了,无奈,只要想出下面的方法
思路是利用JS的事件冒泡机制
clickOpenWin: function(f){ var dataKey = "clickOpenWin.dataKey" var me = $(this); var A = me.data(dataKey); var returnData = null; if(!A){ A = $("<A target='_blank' class='proxyA'>"); me.data(dataKey, A); A.click(function(e){ if(returnData){ A.attr("href", returnData); }else { A.before(me); e.stop(); } }); } me.mouseover(function(){$(this).before(A).appendTo(A);}); me.mouseout(function(){A.before($(this));}); me.click(function(){ A.attr("href", "#|"); returnData = f.apply(this, arguments); }); }
那我就简单做几点说明:
1. 首先,说一下最终的效果,是实现用 “A” 包含你要触发弹窗的元素,原来的click事件要返回弹窗的URL 对应这一句 “returnData = f.apply(this, arguments);”
2. 然后就要说到弹窗拦截的策略了,具体我就不说了,反正 策略里是不会拦截 “A” 本身吧
3. 最后就是合成了,用A包含后,因为事件会冒泡,所以利用正常的点击,生成动态的 链接地址 给A,触发A的原始点击事件,就完成了
其余的自己体会吧 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-02-03
楼主,解释一下吧。。鄙人才疏学浅
|
|
返回顶楼 | |
发表时间:2012-02-03
确实需要注释一下
|
|
返回顶楼 | |
发表时间:2012-02-04
什么啊 ,看不懂。。。。。
|
|
返回顶楼 | |
发表时间:2012-02-06
target='_blank'
用了a链接弹出窗口 |
|
返回顶楼 | |
发表时间:2012-02-06
哎哟,有人耍流氓
做网站非得做流氓网站? |
|
返回顶楼 | |
发表时间:2012-02-07
最后修改:2012-02-07
gtssgtss 写道 哎哟,有人耍流氓
做网站非得做流氓网站? 本来想说这方面的问题来,因为,我说的这个方法不能用来“耍流氓”,所以就没说。 但既然你这样说了,那我就必须再说明一下: 正如我在第3点中说到的,此方面是利用用户的“正常点击”(也就是主动点击行为),才能触发。而利用脚本事件是不能触发A的href效果的,所以我不是在“耍流氓”。 那我为什么还要写这个呢? 还不是因为真正的“流氓”把原来的“良家妇女”(浏览器)调戏成“泼妇”了,合理的弹出窗口也被拦截了,所以才无奈费了半天劲,想出这个办法。 |
|
返回顶楼 | |
发表时间:2012-02-18
最后修改:2012-02-18
偶才疏学浅,对apply对象冒充函数不太熟悉,今天特意翻了一下JS手册,里面给出一个apply的demo演示说明“对象冒充”的原理,才弄明白楼主的思路,这个“冒充”思路太妙了 !
所点击那个href,不一定是原来的那个href,有可能是被神不知鬼不觉给冒充替换的href.... 下面这个apply函数冒充原理 <script type="text/javascript"> function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.color); }; } function ClassB(sColor, sName) { //this.newMethod = ClassA; //this.newMethod(color); //delete this.newMethod; ClassA.apply(this, arguments);//A对象被B对象冒充了,秘密就在这里... this.name = sName; this.sayName = function () { alert(this.name); }; } var objA = new ClassA("blue"); var objB = new ClassB("red", "John"); objA.sayColor();//print blue objB.sayColor();//print red(为啥blue被red替代了,秘密在上面...) objB.sayName(); </script> |
|
返回顶楼 | |
发表时间:2012-04-26
window.document.body 注册点击事件 触发弹出窗口
|
|
返回顶楼 | |
发表时间:2012-04-30
我有一件事没搞明白:
我在firefox下,设置了“需要打开新窗口时用标签页代替”,但是浏览某些流氓网页时,却可以自动弹出新窗口,是怎么做到的? |
|
返回顶楼 | |