两个html之间跳转 确定点,两个跨域页面进行跳转传参的终极方案

本文约定:

A页面:跳转前的原来页面,假设为http://a.com

B页面:将要跳转的目标页面,假设为http://b.com

一、简单方案

说到页面跳转,首先想到的就是用a标签:

// 在A页面点击链接,并将参数data传到B页面

// 在B页面接收A页面传过来的参数

var data = window.location.href.split("?")[1].split("=")[1];

还可以使用window.open方法跳转页面:

// A页面

window.open(“http://b.com?data=1”, “_blank”);

在B页面获取值同上

弊端:通过URL的方式传参是有字符限制的,只能传递较少的数据

二、传递长数据方案

想要传递大量数据就不能使用将数据放在URL中这种方式进行传递,这里我使用了HTML5中新引入的window.postMessage方法进行数据传递。

// A页面

var popup = window.open(“http://b.com”, ”_blank”);

if(popup){

setTimeout(function(){

var data = {data: 1};

popup.postMessage(JSON.stringify(data), “http://b.com”);

},500);

}

// B页面

function receiveMessage(event){

if (event.origin !== “http://a.com”) return;

console.log(JSON.parse(event.data)); // {data: 1}

}

window.addEventListener(“message”, receiveMessage, false);

如果是在A页面中使用iframe标签嵌入B页面的情况下,方法如下:

// A页面

var myIframe = document.getElementById(“myIframe”);

if(myIframe ){

var data = {data: 1};

myIframe.contentWindow.postMessage(JSON.stringify(data), “http://b.com”);

}

B页面同上

弊端:

1.使用postMessage发送消息时要保证B页面已加载,由于A和B两个页面是跨域的,所以使用popup.onload是 无效的,只能使用setTimeout延迟发送,这种做法比较low,不能保证稳定性。

2.使用iframe标签只能嵌入页面,不能打开新窗口,使用window.open可以打开新窗口,但是,当B页面刚被加载时是没有数据传递的,数据是在窗口打开后才被发送,所以B页面会有延迟

三、终极方案:iframe+postMessage+localStorage

在A页面中使用iframe标签加载B页面并隐藏,当点击跳转时,使用postMessage发送消息给B页面,在B页面中监听A页面发过来的数据,然后保存到localStorage中,然后当A页面使用window.open打开B页面时,B页面直接去localStorage中取数据,这样就完成了页面跳转并传参

// A页面

跳转

function toB(){

var myIframe = document.getElementById(“myIframe”);

if(myIframe){

var data = {data: 1};

myIframe.contentWindow.postMessage(JSON.stringify(data), “http://b.com”);

window.open(“http://b.com”, ”_blank”);

}

}

// B页面

var aData = localStorage.getItem(“aPageData”);

if(aData){

doSomething(aData); // 当能获取到数据时就说明是从A页面跳转过来的

localStorage.removeItem(“aPageData”);

}else{

window.addEventListener(“message”, receiveMessage, false);

}

function receiveMessage(event){

if (event.origin !== “http://a.com”) return;

if(event.data){

localStorage.setItem(“aPageData”, event.data);

}

}

总结:

1.iframe和postMessage都是可以跨域的,而localStorage是不能跨域共享数据的

2.window.postMessage 中的window 始终是指将要跳转的目标页面的window对象

结语:跨域页面进行跳转传参不仅仅只有本文中提到的这几种方案,这里就不做过多介绍了,文中有许多细节代码没有写出,有哪里不对的地方,欢迎大家指正,最后感谢大家的支持。

更多个人文章

HTML页面跳转实现方式大全 meta>标签是HTML语言中的一个标签,用于描述HTML文档的元数据(metadata)。元数据是关于数据的数据,它提供了关于HTML文档的信息,例如文档的编码方式、作者、关键词、描述等等。标签通常包含在文档的头部标签内。下面是一些常用的:指定HTML文档的字符编码方式。常用的编码方式包括UTF-8ISO-8859-1等。:指定HTML文档的作者。 阅读详情

相关推荐

Html多个页面之间相互定时跳转

Httml多个页面之间相互定时跳转

weixin_42636075的博客 2485

html页面间的跳转及导航栏制作

html页面间的跳转及导航栏制作技术:通过链接进行页面跳转,通过按钮进行页面跳转

cnds123的专栏 1万+

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit we1 = P3^0; sbit we2 = P3^1; sbit we3 = P3^2; sbit we4 = P3^3; sbit DS = P1^0; sbit D1 = P3^6; sbit D2 = P3^7; uch

perseverance51博客 1525

html页面跳转的方法

【代码】html页面跳转的方法。

小码的博客 1万+

HTML页面跳转的几种方式(重定向)

HTML网址跳转,就是通过一个网址跳转到另一个网址中去,比如你需要在利用输入A网址的情况下,打开的是B网址的网站,那么A网址到B网址之间跳转就是网址跳转。(此方法也常用于网站的404页面)...

ts小陈的博客 2万+

两个页面进行跳转传参方案

本文约定: A页面跳转前的原来页面,假设为http://a.com B页面:将要跳转的目标页面,假设为http://b.com 一、简单方案 说到页面跳转,首先想到的就是用a标签: // 在A页面点击链接,并将参数data传到B页面 <a href=”http://b.com?data=1” target=”_blank” /> // 在B页面接收A页面传过来的参数 <script> var data = window.location.href.split

bighead的博客 3444

两个页面进行跳转传参终极方案

本文约定: A页面跳转前的原来页面,假设为http://a.com B页面:将要跳转的目标页面,假设为http://b.com

weixin_43552879的博客 1177

postmessage解决两个页面之间传递参数

1.iframe和postMessage都是可以的,而localStorage是不能共享数据的2.window.postMessage 中的window 始终是指将要跳转的目标页面的window对象原文链接:https://www.jianshu.com/p/6be6c3f2867a。

weixin_67849181的博客 3023

js 页面之间跳转传参

js实现html 页面之间跳转传参 一、页面之间跳转传参 1、在页面之间跳转的方式有两种: window.location.href=”test.html?num=10” 地址会改变参数也会被传递但是不会打开新窗口 window.open("test.html") 这样会重新打开一个新窗口。 2、获取参数 如果是按照第一种方式进行了传递则有参数,那么我们怎们获取url中的参数那,那...

weixin_33749242的博客 1270

HTML页面之间跳转与传值

原文地址:https://www.cnblogs.com/mingmingcome/p/5926254.html 跳转的方法如下: 方法一: window.location.href = "b.html"; 方法二(返回上一个页面,这个应该不算,先放在这): window.history.back(-1); 方法三: self.location = "b.html"; 方法四: ...

kkhk04的博客 2649

html局部页面刷新和跳转传参

index.html为父页面,A.html和B.html为局部刷新的子页面页面跳转: 如index.html所示,用标签实现页面的嵌套。 参数传递: 当需要传递参数时,可使用js实现为跳转页面的同时传参,获取的参数需要解码。 1.index.html 页面跳转 跳转A 跳转B 2.A.html A页面 A

道问苍天的博客 1万+

什么是跳转传参

跳转传参(或称为URL传参)是指在页面跳转时,通过在URL中附加参数的方式,将数据传递到目标页面的过程。通常,在前端开发中,跳转传参用于在页面之间传递一些信息(如用户选择的内容、搜索条件、表单数据等)。1. 常见的跳转传参方式:1.1 通过 URL 查询字符串传递参数(GET 方式)最常见的跳转传参方式是在 URL 中使用查询字符串传递参数。这里,name和age就是查询参数,John和30是它们对应的值。

2403_87324558的博客 1309

vue实现页面跳转传参的八种方法

我们知道,在vue中每个页面都需要在路由中声明,就是在router/index.js中写下面代码: import Vue from 'vue' import Router from 'vue-router' import Test from "../components/Test"; Vue.use(Router) export default new Router({ mode: 'his...

静幽水 1万+

js 页面跳转传参

方法一:window.open() (说在前面)window.open()跳转页面是打开一个新的窗口,这是与window.location的一个不同点。 使用此方法跳转的新页面获取参数的办法是使用window.opener属性,指向原页面跳转前)的window对象。最后调用你想用的数据。 页面a跳转页面b: <html lang="en"> <head> <...

EIERICA的博客 8505

html自动跳转指定页面传参,HTML页面跳转及参数传递问题

原标题:HTML页面跳转及参数传递问题HTML页面跳转:window.open(url, "", "width=600,height=400");第二个参数:_self,在当前窗口打开窗口;_blank(默认值),在另外的新建窗口打开新窗口;window.location.href="https://www.jb51.net"; //在同当前窗口中打开窗口window.history.back(-...

weixin_28935433的博客 674

两个html页面之间传参

var href = document.URL; href = decodeURI(href); var oText1 = href.split("=")[1]; eg:  a.html    local.href = 'www.aaa.com/index.php?a=1'; b.html var href = document.URL; href = decodeURI

u011011025的专栏 1705

html页面跳转以及传值的处理

静态页面html跳转传值的JS处理技巧 这篇文章主要介绍了静态页面html跳转传值的JS处理技巧,结合实例形式分析了HTML页面跳转通过URL传递参数的方法与javascript处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了静态页面html跳转传值的JS处理技巧。分享给大家供大家参考,具体如下: 在html中通过"?"传值: <a href="index2.html?name=caoy">静态传值</a> 在跳转到的页面index2.html中接收:

devin_xin的博客 5607

ajax 跳转 html页面传值,ajax实现页面跳转传参

javascript" name=code class="page_speeder_20720">整理版$.ajax({type:"POST",url://你的请求程序页面随便啦async:false,//同步:当有返回值以后才会进行后面的js程序。data://请求需要发送的处理数据success:function(msg){if(msg){//根据返回值进行跳转window.loc...

weixin_39637151的博客 5152

R3LIVE项目实战(3) —双目相机与激光雷达 lidar_camera_calib联合标定

lidar_camera_calib是一个在无目标环境中,用于高分辨率LiDAR(例如Livox)和摄像机之间的外部标定工具。我们的算法可以在室内和室外场景中运行,并且只需要场景中的边缘信息。如果场景适合,我们可以实现类似于或甚至超过基于目标的方法的像素级准度。我们使用标定的外部参数给点云上色,并与实际图像进行比较。A和C是点云的局部放大视图。B和D是与A和C中的点云对应的摄像机图像的部分。

几度春风里的博客 4012

中兴PTN业务配置

PTN承载的业务类型主要有以下几种:无线基站接入链路:E1(2G)、FE(3G IP接口);现网SDH/MSTP接入环:E1、STM-1、FE、GE;CTN IP RAN承载网可接入E1基站、FE接口基站、也可以直接接入SDH接入环;

上一篇: 鸿蒙系统推送是在系统更新里面吗,华为手机鸿蒙系统推送升级,鸿蒙系统可靠吗?...
下一篇: 用户报告每天早晨打开某台计算机时,您有一台名为Computer1的计算机运行Windows7和WindowsInternetExplorer8。一位用户报告Computer1有很多InternetEx...
小蛮腰课代表
博客等级 码龄8年 33粉丝 85原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值