浅析利用window.open如何绕过浏览器拦截机制、如何脱离当前浏览器窗口打开新窗口、window.open和window.location.href的区别及常见问题

一、window.open如何绕过浏览器拦截机制

  在浏览器的安全机制里,非用户触发的window.open方法是会被拦截的,例如:

var btn = $('#btn');
btn.click(function () {
    // 算做用户触发,所以不会被拦截
    window.open('http://cssha.com')
});

  上面的window.open是用户click触发的,所以不会被拦截,可以正常打开新窗口。再看下面这个:

var btn = $('#btn');
btn.click(function () {
    $.ajax({
        url: '...',
        success: function (url) {
            // 会被拦截
            window.open(url);
        }
    })
});

  用户没有直接触发window.open,而是发出一个ajax请求,window.open方法被放在了ajax的回调函数里,这样的情况是会被拦截的,因为浏览器认定不是为用户所触发。

  那么当用户点击按钮,发出ajax请求,如何在ajax请求完成后再打开新窗口,又不被拦截呢? 接着往下看:

var btn = $('#btn');
btn.click(function () {
    // 先打开一个不被拦截的新窗口
    var newWindow = window.open();
    $.ajax({
        url: '...',
        success: function (url) {
            // 然后修改新窗口的url
            newWindow.location.href = url;
        }
    })
});

  当用户点击按钮的时候,先打开一个空白页,这时不会被拦截,然后再发ajax请求,在ajax回调里面修改新窗口的 location.href,这样就不会被拦截了。

二、脱离当前浏览器窗口打开新窗口

1、window.open 语法

window.open(URL,name,features,replace)

  其中窗口特征(Features)就不说了,就是用来描述新开的窗口的一些特征的,需要使用的时候去文档查询吧。

2、主要看一下如何脱离当前浏览器窗口打开新窗口

// 在新窗口打开地址 - 在浏览器窗口打开新 tab 页
window.open('http://www.test.url.com','_blank');

// 在新窗口打开地址 - 脱离当前浏览器窗口打开一个新的浏览器窗口
window.open('http://www.test.url.com','_blank','location=no');

三、window.open和window.location.href的区别

1、window.location是你对当前浏览器窗口的URL地址对象的参考,而window.open是用来打开一个新窗口的函数

2、window.open不一定是打开一个新窗口,而有可能替换当前窗口

  只要有窗口的名称和window.open中第二个参数中的一样就会将这个窗口替换,用这个特性的话可以在iframe和frame中来代替location.href。

<iframe name="aa"></iframe>   
<input type=button οnclick="window.open('1.htm','aa','')">

<input type=button οnclick="self.frames['aa'].location.href='1.htm'">
// 以上 2 种的效果是一样的 

3、window.open 用来打开新窗口   -   新窗口打开

  而 window.location 用来替换当前页,也就是重新加载当前页    -   当前页打开

4、在框架内指定页面打开连接

  window.location或window.open如何指定target?  -   这是一个经常遇到的问题,特别是在用 iframe 框架的时。

  解决办法:

(1)window.location 改为 top.location 即可在顶部链接到指定页

(2)window.open("你的网址","_top");

5、是否能打开其他网站地址

  window.open()是可以在一个网站上打开另外的一个网站的地址,而window.location()是只能在一个网站中打开本网站的网页

6、window.open() 可以经过设置后弹出窗口  -  定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。

posted @ 2019-08-06 21:51  古兰精  阅读(5701)  评论(0编辑  收藏  举报