我们都知道可以在html代码中使用<a href="xxxx" target="_blank"></a>这种方式来打开一个新的窗口打开一个页面,但是有很多时候,我们需要在某段js代码中去打开一个新的窗口实现页面跳转。有如下几种方法来实现这个功能。

1.Window.open()方法,比如如下代码,将打开baidu首页。

window.open("http://www.baidu.com")

但是这个方法是有问题的,那就是有些浏览器会拦截。所以我们需要第二种方法,也是本文主要介绍的方法。

2.模拟form表单提交来打开一个新的页面

它的主要思路就是动态构建一个隐藏的form表单,将其target设为“_blank”,然后在动态构建起表单参数,最后手动触发起click事件。

举个例子,我们要在一段js代码中打开http://www.baidu.com?a=1这个链接。我们可以用如下的代码来实现。

//js代码
var form='<form action="https://www.baidu.com" target="_blank" id="windowOpen" style="display:none">';
form+='<input name="a" value=1 />';
form+='</form>';
$('body').append(form);
$('#windowOpen').submit();
$('#windowOpen').remove();

当然,我们可以将上述代码封装成一个函数,函数传入两个参数,一个是url,另外一个是参数param,其中param是一个js对象。

 function open_page(url, param) {
var form = '<form action="' + url + '" target="_blank" id="windowOpen" style="display:none">';
for(var key in param) {
form += '<input name="' + key + '" value="' + param[key] + '"/>';
}
form += '</form>';
$('body').append(form);
$('#windowOpen').submit();
$('#windowOpen').remove();
}

这样,我们就可以这样来调用函数了。

var url='https://www.baidu.com';
var param={a:1};
open_page(url,param);

甚至,我们可以将它封装成一个插件,以后我们就可以直接调用这个插件了。

//模拟form表单提交打开新的页面
$.extend({
open_page: function(url, param) {
var form = '<form action="' + url + '" target="_blank" id="windowOpen" style="display:none">';
for(var key in param) {
form += '<input name="' + key + '" value="' + param[key] + '"/>';
}
form += '</form>';
$('body').append(form);
$('#windowOpen').submit();
$('#windowOpen').remove();
}
});

调用方法如下:

var url='https://www.baidu.com';
var param={a:1};
$.open_page(url,param);

PS:需要注意的是,如果是在ajax回调函数中调用上述方法,需要将async设置为false,否则浏览器还是会拦截上述弹窗。

在js中实现新窗口打开页面的更多相关文章

  1. 如何在Flash中新窗口打开页面而不被拦截

    Flash的wmode必须是opaque或者transparent,允许Flash访问页面脚本.另外跳转必须是点击直接触发. 代码:ExternalInterface.call("windo ...

  2. 【模态窗口-Modeldialog】提交请求时禁止在新窗口打开页面的处理方法

    在使用Window.ShowModalDialog()打开模态窗口后,在模态窗口内提交时总是会在新窗口中打开. 解决办法: 在要弹出的窗口的<head>之间加: <base targ ...

  3. vue-router 在新窗口打开页面的功能

    项目中,需要点击链接后再新窗口打开页面,大家知道vue是单页面应用开发框架,那么也不是不可以实现这个功能 很简单,详情看下面 1.<router-link>标签实现新窗口打开 <ro ...

  4. vue-router在新窗口打开页面

    1. <router-link>标签实现新窗口打开: <router-link target="_blank" :to="{path:'/app/dat ...

  5. react 在新窗口 打开页面

    遇到这个需求 首先通过 Link a去尝试直接跳转.发现2个问题 1.Link跳转 会自动进行登录校验,我设想是路由没有匹配到,去验证后大致排除了. 因为这个链接 直接粘贴到浏览器 是可以访问到的. ...

  6. javaScript防止拦截新窗口打开页面

    原文发布时间为:2009-05-04 -- 来源于本人的百度文章 [由搬家工具导入] 兼容IE.FF.GOOGLE。防止拦截。。。。 <html xmlns="http://www.w ...

  7. Google AdSense怎么在新窗口打开

    Google AdSense早在十年前就支持在新窗口打开了,为什么我的AdSense广告还在当前页面打开? 德顺查了一下,发现最早在2007年就有网站记载,谷歌AdSense开始试验新窗口打开功能. ...

  8. HTML之:让网页中的<a>标签属性统一设置-如‘新窗口打开’

    在开发过程中,我们往往想在页面中,给<a>设置一个统一的默认格式,例如我们想让链接:“在新窗口打开”,我们就可以使用<base>标签 在网页中添加这段代码: <head& ...

  9. 网页中<a>标签新窗口和location.href 新窗口打开

    在网页制作过程中,经常遇到新窗口打开,一般是a超级链接或者location.href 新窗口打开形式,下面分别讲述两种之间的不同方式 1,a标签 新窗口 添加属性 target="_blan ...

随机推荐

  1. JavaScript网页全屏API

    在大多数的浏览器中都有实现网页全屏显示的功能,并且大部分浏览器实现全屏显示和退出全屏显示的快捷键通常是F11和Esc两个按键.如今,W3C已经制定了关于网页全屏显示的API,利用这个API 可以实现网 ...

  2. myeclipse8.5打包jar并引入第三方jar包

    用myeclipse自带的export工具,无法引入被引用的第三方的jar包,有两种方式: (1)直接export出jar包,解压jar包(第三方的jar包太多,太麻烦) 在创建好的JAR文件里找到M ...

  3. Windows & Linux服务器如何禁用ping总结

      有时候你ping一些服务器或网站,你会发现ping不通,这个是因为对方出于安全因素(security reason)或避免网络拥堵(avoid network congestion)等原因,禁用了 ...

  4. ASP.net里不让浏览器缓存代码和Session使用注意事项

    //不让浏览器缓存             context.Response.Buffer = true;             context.Response.ExpiresAbsolute = ...

  5. UEFI模式 Thinkpad t470p Ubuntu 16.04 LTS

    准备阶段 使用官方推荐的Rufus制作U盘启动盘 在Windows 10系统下压缩出来一些空间(60G),不要分配盘符 系统设置 在Bios中关闭secure boot (设置为Disenabled) ...

  6. LeetCode 456. 132 Pattern

    问题描述 给一组数,判断这组数中是否含有132 pattern. 132 pattern: i < j < k, 且 ai < ak < aj 第一种解法 使用栈来保存候选的子 ...

  7. [SCOI2010]传送带

    在两个传送带上分别三分两个点计算 三分套三分 # include <bits/stdc++.h> # define IL inline # define RG register # def ...

  8. Nginx负载均衡——基础功能

    熟悉Nginx的小伙伴都知道,Nginx是一个非常好的负载均衡器.除了用的非常普遍的Http负载均衡,Nginx还可以实现Email,FastCGI的负载均衡,甚至可以支持基于Tcp/UDP协议的各种 ...

  9. Hadoop 安装流程

    前言:因项目中需要数据分析,因而使用hadoop集群通过离线的方式分析数据 参考着网上的分享的文章实施整合的一篇文章,实施记录 安装流程: 1.设置各个机器建的ssh 无密码登陆 2.安装JDK 3. ...

  10. Java微服务对UTC时间格式的处理

    一.背景 先说一下为什么要使用UTC时间.开发一个全球化的系统,服务端(Java微服务)集中部署在同一个地方,用户在全球通过浏览器.手机客户端访问.不同地区的时区是不一样的,同一个时间戳,不同的用户看 ...