JS打开新窗口防止被浏览器阻止的方法

 更新时间:2015年01月03日 10:51:14   投稿:shichen2014  
这篇文章主要介绍了JS打开新窗口防止被浏览器阻止的方法,分析对比了常用方法与改进方法,是非常实用的技巧,需要的朋友可以参考下

本文实例讲述了JS打开新窗口防止被浏览器阻止的方法。分享给大家供大家参考。具体分析如下:

用传统的window.open()方式打开新窗口,会被浏览器阻止,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢?其实办法还是有的,这里我们就来分析一下如何解决这个问题

我最近也遇到了这样的问题,所以就把弹出新窗口的方法分享给大家。欢迎大家补充哦...

第一种、使用原生javascript的window.open()方法(大部分情况下会被浏览自阻止)

第二种、模拟表单(form)提交,原理是指定表单的action为想要打开的URL地址,target设置为"_blank"

复制代码 代码如下:
document.getElementById("msgTxt").innerHTML="<form id='hiddenlink' action='"+sHref+"' target='_blank'><input type='hidden' name='object'   value='"+objValue+"'></form>";
var s=document.getElementById("hiddenlink");
s.submit();

不过模拟表单提交的方法经有可能也会被阻止...

第三种、模拟超链接(<a>)被点击

当按下一个按钮时,想打开一个新的标签页,可以模拟链接被按下,然后打开链接。
但是在jQuery中,使用a.click(), a.trigger('click')等都不会引起链接默认事件被执行。
下面的代码模拟生成了链接点击事件,然后执行默认打开链接的事件。

不过值得注意的一点是:对应IE浏览器,只有IE9以上才支持document.createEvent函数,所以以下代码在IE执行的话要IE9以上才行

复制代码 代码如下:
var a = $("<a href='http://www.test.com' target='_blank' >test</a>").get(0);
 var e = document.createEvent('MouseEvents');
 e.initEvent('click', true, true);
 a.dispatchEvent(e);


第四种、利用浏览器的冒泡事件(转载来的)

复制代码 代码如下:
clickOpenWin: function(f){
    var dataKey = "clickOpenWin.dataKey"
    var me = $(this);
    var A = me.data(dataKey);
    var returnData = null;
    if(!A){
        A = $("");
        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的原始点击事件,就完成了。

希望本文所述对大家的javascript程序设计有所帮助。

相关文章

  • js简单的分页器插件代码实例

    js简单的分页器插件代码实例

    这篇文章主要介绍了js简单的分页器插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • js实现星星闪特效

    js实现星星闪特效

    这篇文章主要为大家详细介绍了js实现星星闪特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Javascript四舍五入Math.round()与Math.pow()使用介绍

    Javascript四舍五入Math.round()与Math.pow()使用介绍

    本文为大家介绍下Javascript中的四舍五入Math.round()与Math.pow()的使用,感兴趣的朋友不要错过
    2013-12-12
  • javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法

    javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法

    这篇文章主要介绍了javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法,涉及javascript鼠标事件及页面元素样式操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • JS+HTML5实现图片在线预览功能

    JS+HTML5实现图片在线预览功能

    这篇文章主要为大家详细介绍了JS+HTML5实现图片在线预览功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • requirejs按需加载angularjs文件实例

    requirejs按需加载angularjs文件实例

    本篇文章主要介绍了requirejs按需加载angularjs文件实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 微信小程序获取用户openid的实现

    微信小程序获取用户openid的实现

    这篇文章主要介绍了微信小程序获取用户openid的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • JS对象去重的多种方式小结

    JS对象去重的多种方式小结

    在 JavaScript 中,对象的去重通常是指在一个对象数组中,根据某些属性值去掉重复的对象,本文给大家总结了一些JS对象去重的多种方式,并通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-09-09
  • Express框架req res对象使用详解

    Express框架req res对象使用详解

    这篇文章主要为大家介绍了Express框架req res对象使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 浅谈JavaScript函数参数的可修改性问题

    浅谈JavaScript函数参数的可修改性问题

    这篇文章主要是对JavaScript函数参数的可修改性进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12

最新评论