Js实现两个跨域页面进行跳转传参的方案详解

 更新时间:2023年12月15日 08:59:22   作者:River_何  
这篇文章主要为大家详细介绍了JavaScript中实现两个跨域页面进行跳转传参的方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

本文约定:

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

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

一、简单方案

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

// 在A页面点击链接,并将参数data传到B页面
<a href=”http://b.com?data=1” target=”_blank” />
// 在B页面接收A页面传过来的参数
<script>
    var data = window.location.href.split("?")[1].split("=")[1];
</script>

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

// A页面
<script>
    window.open(“http://b.com?data=1”, “_blank”);
</script>

在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页面
<iframe id=”myIframe” src=“http://b.com” />

<script>
    var myIframe = document.getElementById(“myIframe”);
    if(myIframe ){
        var data = {data: 1};
        myIframe.contentWindow.postMessage(JSON.stringify(data), “http://b.com”);
    }
</script>

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页面
<span onClick=”toB();”>跳转</span>
<iframe id=”myIframe” src=“http://b.com” style=”display: none” />

<script>
    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”);
        }
    }
</script>
// B页面
<script>
    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);
        }
    }
</script>

总结:

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

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

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

到此这篇关于Js实现两个跨域页面进行跳转传参的方案详解的文章就介绍到这了,更多相关Js跨域页面传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Js获取图片原始宽高的实现代码

    Js获取图片原始宽高的实现代码

    下面小编就为大家带来一篇Js获取图片原始宽高的实现代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-05-05
  • 基于javascript实现图片预加载

    基于javascript实现图片预加载

    这篇文章主要介绍了javascript图片预加载的方法,实例分析了javascript实现图片预加载的思路,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-01-01
  • 原生JS实现Tab栏切换功能的示例代码

    原生JS实现Tab栏切换功能的示例代码

    本文主要介绍了如何使用JavaScript实现一个简单的商品展示页面,包括前置知识点的讲解、功能模块的编写以及易错点的总结,如对象解构、事件绑定和箭头函数的使用等,需要的朋友可以参考下
    2026-04-04
  • 一个Action如何调用两个不同的方法

    一个Action如何调用两个不同的方法

    这篇文章主要介绍了一个Action如何调用两个不同的方法,需要的朋友可以参考下
    2014-05-05
  • ECMAScript6中Map映射的基本概念与常用方法

    ECMAScript6中Map映射的基本概念与常用方法

    Map是ES6中新增的数据结构,Map类似于对象,但普通对象的 key 必须是字符串或者数字,而 Map 的 key 可以是任何数据类型,这篇文章主要给大家介绍了关于ECMAScript6中Map映射的基本概念与常用方法,需要的朋友可以参考下
    2021-07-07
  • d3.js 地铁轨道交通项目实战

    d3.js 地铁轨道交通项目实战

    这篇文章主要介绍了d3.js 地铁轨道交通项目实战,本文通过实例代码项目截图给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Javascript闭包演示代码小结

    Javascript闭包演示代码小结

    有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4。
    2011-03-03
  • JS结合bootstrap实现基本的增删改查功能

    JS结合bootstrap实现基本的增删改查功能

    这篇文章主要介绍了JS结合bootstrap实现基本的增删改查功能,需要的朋友可以参考下
    2016-07-07
  • 基于javascript实现文字无缝滚动效果

    基于javascript实现文字无缝滚动效果

    这篇文章主要介绍了基于javascript实现文字无缝滚动效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JavaScript实现生成动态表格和动态效果的方法详解

    JavaScript实现生成动态表格和动态效果的方法详解

    这篇文章主要介绍了如何通过JavaScript语言实现动图表格的生成以及动态效果的实现,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-02-02

最新评论