zoukankan      html  css  js  c++  java
  • 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程序设计有所帮助。

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/huaxingtianxia/p/6187047.html
Copyright © 2011-2022 走看看