zoukankan      html  css  js  c++  java
  • Html跨域js封装,前端页面跨域js,postMessage实现跨域

    Html跨域js封装,前端页面跨域js,postMessage实现跨域

    ================================

    ©Copyright 蕃薯耀 2020-08-05

    https://www.cnblogs.com/fanshuyao/

    一、js文件:

    crossOrigin.js:

    /**
     * 跨域js
     * 使用postMessage实现html页面的js跨域调用
     * 
     */
    
    
    /**
     * 封装向iframe嵌套的系统页面发起请求方法,该外部页面需要声明window.addEventListener("message", function(event){});监听事件来接收
     * 本系统向外部系统发送请求,传递参数
     * eventdata:传递的参数,一般就是json对象,如{aa : 11, bb : 22}
     * iframeTarget:document.getElementById("mapIframe").contentWindow
     */
    var crossOriginHandler = {
        call : function (iframeTarget, eventdata) {
            if(iframeTarget == null || typeof iframeTarget == "undefined"){
                console.error("iframe对象未定义");
            }
            iframeTarget.postMessage(eventdata, "*");
        },
        
        callById : function (iframeId, eventdata) {
            if(iframeId == null || typeof iframeId == "undefined" || iframeId == ""){
                console.error("iframe的id未定义");
            }
            var iframeTarget = document.getElementById(iframeId).contentWindow;
            iframeTarget.postMessage(eventdata, "*");
        }
    };
    //使用示例:(首先得引入js)系统向iframe发起请求,
    /*
    crossOriginHandler.call(document.getElementById("mapIframe").contentWindow, {
        aaa : "aaa",//这个参数固定,不能修改
        bbb : 123
    });
    
    或者:
    
    crossOriginHandler.callById("iframe的Id值", {
        aaa : "aaa",//这个参数固定,不能修改
        bbb : 123
    });
    */
    
    
    /**
     * 监听外部系统的跨域回调请求
     * 需要在本系统页面定义一个方法function crossOriginMessageHandler(data);处理外部系统的请求
     * 外部系统回调方式:window.parent.postMessage({aa : "aa", bb : 123}, "*")
     * @param event
     * @returns
     */
    window.addEventListener("message", function(event){
        if(event){
            if(window.crossOriginMessageHandler && (typeof window.crossOriginMessageHandler === "function")){
                window.crossOriginMessageHandler(event.data);
            }else{
                console.error("crossOriginMessageHandler(data)方法未定义");
            }
        }
    }, false);

    二、使用

    1、引入js

    <script type="text/javascript" src="../../static/js/crossOrigin.js"></script>

    2、本页面接收消息,在页面定义回调的方法

    /**
     * 处理跨域请求
     * data : json对象
     * {crossCallType: "xxx", params: {status: "1"}}
     */
    function crossOriginMessageHandler(data){
        console.log("页面接收请求,参数为===" + JSON.stringify(data));
        if(data){
            var crossCallType = data.crossCallType;//业务类型属性,区分哪个业务
            if(crossCallType == "xxx"){
                //自定义方法
            
            }else{
                alert("请求类型[" + crossCallType + "]不正确");
            }
        }
    };

    3、向iframe发送消息

    crossOriginHandler.call(document.getElementById("mapIframe").contentWindow, {aa:1,bb:"bbbb"});

    ================================

    ©Copyright 蕃薯耀 2020-08-05

    https://www.cnblogs.com/fanshuyao/

  • 相关阅读:
    python16_day03【集合、编码、函数、递归、内置函数】
    python16_day02【列表、字典】
    django 自定义用户表替换系统默认表
    用国内镜像源pip加速安装模块
    python虚拟环境的搭建命令mkvirtualenv
    测试分类
    bug理论
    测试用例的优先级
    测试流程
    测试理论
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/13438579.html
Copyright © 2011-2022 走看看