有没有办法在 Blazor Wasm 组件中使用 Interop 调用 window.onload

问题描述 投票:0回答:1

我正在尝试创建一个使用 Moneris 托管支付解决方案的应用程序 - 基本上实现一个 iframe,它需要在加载时在窗口上注册事件。它有 postmessage api,调用时会返回一条消息,我能做的就是注册一个回调函数,这样我就可以解码/使用这些消息。

问题是我不确定如何在 blazorwasm 上调用这个 window.onload 。我尝试过实现这一点,但目前它不起作用。

我正在分享我的代码。非常感谢您的帮助。

这是在我的 Blazor 页面中。

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    Console.WriteLine("hello test");
    if (firstRender)
    {
        Console.WriteLine("invoking this function");
        await JSRuntime.InvokeVoidAsync("MonerisEvents.setWindowOnLoad");
    }
}

这是我在 wwwroot 中的 javascript 代码。

window.MonerisEvents = 
{
    doMonerisSubmit: function doMonerisSubmit() {
        var monFrameRef = document.getElementById('monerisFrame').contentWindow;
        monFrameRef.postMessage('tokenize', 'https://esqa.moneris.com/HPPtoken/index.php');
        //change link according to table above
        return false;
    },

    respMsg : function (e) {
        var respData = eval("(" + e.data + ")");
        console.log(respData);
        console.log(respData.responseCode);
        console.log(respData.errorMessage);
        console.log(respData.bin);
        console.log(respData.dataKey);


        document.getElementById("monerisResponse").innerHTML = e.origin + " SENT " + " - " +
            respData.responseCode + "-" + respData.dataKey + "-" + respData.errorMessage;
        document.getElementById("monerisFrame").style.display = 'none';
    },

    setWindowOnLoad : function setWindowOnLoad()
    {
        var self = this;
        window.onload = function () {
            console.log("was here second");
            if (window.addEventListener) {
                window.addEventListener("message", self.respMsg, false);
            }
            else {
                if (window.attachEvent) {
                    window.attachEvent("onmessage", self.respMsg);
                }
            }
        }
    } 
}
javascript asp.net .net-core blazor blazor-webassembly
1个回答
0
投票

根据OP的确认,直接在blazor wasm应用程序index.html页面中注册

window.addEventListener("message", self.respMsg, false);
事件监听器,无需
window.onload
功能即可工作。

© www.soinside.com 2019 - 2024. All rights reserved.