typescript Infor M3 / IOS(Infor操作系统)中的浏览器跨域问题

a0zr77ik  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(114)

我有一个使用M3 TypeScript SDK for H5 (M3 Web客户端) 编写的应用程序。该程序在Windows上的Chrome中的M3/H5中运行。它用于处理信用卡支付,并在M3/H5中的iFrame中访问处理器的站点。它使用dispatchEvent将消息传递回M3/H5。托管域和服务域是相同的。
表单、iFrame和dialog是使用TypeScript动态构建的,并在生成时添加相应的CSC头。添加CSC头帧-祖先解决了我在开发过程中遇到的跨域错误问题当直接在M3 BE中运行时
然而,当我在IOS (Infor操作系统) 中打开M3时,我得到错误 “Blocked a frame with origin [x] from accessing a cross-orgin frame.",即使添加了头。我已经尝试将https://添加到域名、self、localhost和所有相关域。

**代码中CSC帧祖先的示例:**x1c 0d1x
错误:(注意调用的函数和源是同一个域)

当这种情况发生时,当然回叫到M3/H5没有完成。
如果我在IOS外 * 运行同样的代码,直接在M3/H5业务引擎中运行,不会出现错误,dispatchEvent起作用,M3处理交易。
我尝试过设置各种IOS网格设置,但都没有用。我还在Infor上开了一个工单,但他们仍在处理。

测试的网格设置

实际的代码非常简单,但为了清楚起见,我也会提供它。我已经尝试使用postMessage以及将targetOrigin参数设置为''。

function callParentFunction(str) {
            if (str && str.length > 0)
            {
                //Errors indicate a mismatch in domain between the page containing the iframe and this page.

                console.log("callParentFunction:" + str);

                var event2M3 = new CustomEvent("adn2m3", { detail: str });
                event2M3.bubbles = true;
                event2M3.initCustomEvent("adn2m3", true, false, { detail: str });

                top.ccPaymentDiag.dispatchEvent(event2M3);
            }
        }

        function receiveMessage(event) {
            //console.log("receiveMessage");
            if (event && event.data) {
                console.log("call Event Origin: " + event.origin);
                callParentFunction(event.data);
            }
        }

        if (window.addEventListener) {
            window.addEventListener("message", receiveMessage, false);
        } else if (window.attachEvent) {
            window.attachEvent("onmessage", receiveMessage);
        }

        if (window.location.hash && window.location.hash.length > 1) {
            callParentFunction(window.location.hash.substring(1));
        }

字符串
在这一点上,我不知道如何进行。任何建议都非常感谢。
谢谢;
比利

vlju58qv

vlju58qv1#

你需要在一个新窗口中打开它,然后返回结果。
这是唯一的方法,因为这是一个安全问题。框架可以从父页面访问,所以如果你输入密码,父页面可以拦截它。
我们已经使用了类似的方式来登录使用O365。

相关问题