我们都知道可以在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,否则浏览器还是会拦截上述弹窗。

转载于:https://www.cnblogs.com/roy-blog/p/8627895.html

在js中实现新窗口打开页面相关推荐

  1. vue 按钮点击打开新页面_Vue中在新窗口打开页面及Vue-router的使用

    背景 在开发提分加项目的过程中,遇到了点击下拉菜单时在新窗口中打开页面,由于之前一直做的是单页面应用,没有碰到过类似的需求,于是上网搜了一下解决办法,也再次系统地温习了一下vue-router. 解决 ...

  2. 在js中实现新窗口打开

    实现跳转页面的3个方法 1.<a href="xxxx" target="_blank"></a>2.window.open(" ...

  3. vue是用a标签打开新页面_vue | 路由vue-router在新窗口打开页面

    vue的是单页面应用设计的渐进式框架,但是有时在项目中也会出现新窗口打开页面的情况,此时,就需要vue-router的知识来解决 一.使用标签 需要注意的是,router-link并不支持 targe ...

  4. js中屏蔽a标签右键中在新窗口打开功能

    一.在现实开发中,开发人员需要对某些a标签的在新窗口打开进行屏蔽. 这时候问题就来了,我们该如何去屏蔽,是用js直接屏蔽a标签的右键事件呢,还是去修改本地的浏览器右键事件(不现实),我们不可能要求用户 ...

  5. vue-router 如何在新窗口打开页面

    1. <router-link>标签实现新窗口打开: 官方文档中说 v-link 指令被 <router-link> 组件指令替代,且 <router-link> ...

  6. vue-router 设置路由在新窗口打开页面

    一. <router-link>标签实现新窗口打开: 官方文档中说 v-link 指令被 <router-link> 组件指令替代,且 <router-link> ...

  7. 点击链接新窗口打开页面

    列表页面,要是没有内页得话,就新窗口打开一个页面,-------要是有的话在点击列表页得就覆盖打开的窗口页面  使用的标签是  target="_block" 要是想一直打开在新窗 ...

  8. vue是用a标签打开新页面_vue 在新窗口打开页面并设置不同的背景

    开发一个新系统,前端用的vue,vue是单体应用,所有页面都在一个窗口里实现,但项目要求在点button链接后要新打开一个浏览器页面,解决方法如下: 1. 给此button设置新事件 @click=& ...

  9. a标签新窗口打开页面跳转sessionStorage丢失

    Chrome更新89版本后,sessionStorage丢失a标签跳转丢失sessionStorage 最简单的解决办法 - a标签添加属性 rel="opener" Chrome ...

最新文章

  1. 【C++】C++11 STL算法(五):设置操作(Set operations)、堆操作(Heap operations)
  2. linux shell for 循环变量,shell for循环总结
  3. 自动驾驶中的3D物体状态检测
  4. SharpDevelop 开源的 C# IDE ! 和 SharpZipLib
  5. Linux系统配置交换分区
  6. 基础知识《十》unchecked异常和checked异常
  7. 论文,采购管理(背诵)
  8. 大二《数据结构》机考解题报告
  9. 拦截器获取请求参数post_spring boot拦截器中获取request post请求中的参数
  10. 全国土壤湿度数据集/土壤水分数据
  11. windows系统安装下GCC编译器
  12. DNF单机版搭建(局域网、外网)
  13. E8.Net工作流开发架构
  14. python中将字符变为大写_python3.4.3将汉字转换为大写拼音首字母
  15. OpenCV——图像距离变换
  16. 涵盖从java入门到深入架构,Linux、云计算、分布式、大数据Hadoop、ios、Android、互联网技术应有尽有
  17. 利用Pytorch中深度学习网络进行多分类预测(multi-class classification)
  18. 制作我自己的桌面小机器人Zbot(遇到的问题总结)
  19. MSN, 迅雷等调用小红伞作为杀毒软件的方法
  20. 基于Python爬取福建省莆田市天气预报数据获取与预处理的设计与实现

热门文章

  1. Windows8和MacOS10.9双系统安装及Mac常用软件安装--联想E49A
  2. 世界棒球经典赛:从WBC走进中国棒球·棒球1号位
  3. 高速PCB 设计中终端匹配电阻的放置
  4. 输出指定要求的回文日期与字符串拼接
  5. ValueError: cannot resize this array: it does not own its data
  6. 中国程序化购买广告解析:RTB/DSP/Ad Exchange/SSP/DMP,思维导图
  7. 计算机二级excel中mid的用法,mid函数在excel中的使用方法
  8. Linux进程间通信(五)——进程间通信
  9. tyvj2059 元芳看电影
  10. Mac下adb调试华为C8815问题