Created
January 9, 2018 07:02
-
-
Save jokemmy/392985ef7c2ae1fa15a21fd6bfcf6214 to your computer and use it in GitHub Desktop.
防止拦截 window.open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览器会拦截你,那么如何避免呢。 | |
注意,只有直接使用js调用 window.open(url); 打开新窗口时,才会被拦截,如果是改变原理额窗口:window.open(url,'_self'); 则不会被拦截。 | |
那么 js调用 window.open(url); 打开新窗口,如何才能不会浏览器拦截呢? | |
浏览器会拦截你,是认为你将弹出广告等用户不想得到的窗体,所以如果不想让浏览器拦截你,你可以将这个函数改为用户点击时触发,这样浏览器就认为是用户想访问这个页面,而不是你直接弹出给用户。 | |
0)最好的解决方法: | |
var form = document.createElement('form'); | |
form.action = 'www.baidu.com?id=1'; | |
form.target = '_blank'; | |
form.method = 'POST'; | |
document.body.appendChild(form); | |
form.submit(); | |
这种方式,如果需要传递参数时,需要使用 POST 方法, 默认的get方法, 无法传递参数。也就是新页面的url中没有参数部分。 | |
另外,Ajax下载文件时也是用form 表单来模拟下载。 | |
1)所以常用的方法就是在超链接里加入onclick事件,如<a href="javascript:void(0)" onclick="window.open()"></a>这样用户点击这个超链接,浏览器会认为它是打开一个新的链接,所以就不会拦 截。 | |
2)还有一种方法: | |
setTimeout('window.open(url);', 500); | |
使用 setTimeout 包装一下,也可以防止被浏览器拦截。注意这里的超时时间不能太短,否则也会被拦截。 | |
3)可是有时候我们会遇到想要弹出一个窗口,可是却是在onckick事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过下面的方法来避免,就是 先用window.open打开一个窗口,然后修改地址。如 | |
var tempwindow=window.open('_blank');打开一个窗口,然后用 | |
tempwindow.location='http://www.baidu.com';使这个窗口跳转到百度,这样就会呈现弹出百度窗口的效果了。 |
Follow the wishes of users, plz
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
这些方法现在已经不行了