目标/背景:我需要将Angular应用程序中变量的值发送到页面iFrame内的ChatServer(带有JavaScript的ASPX)。它在另一台服务器上。

我尝试过的操作:我在这里关注解决方法:https://stackoverflow.com/a/25098153/11187561

但是,我收到了错误:
属性“contentWindow”在HTMLElement类型上不存在

接下来我还尝试了什么:通过SO,我发现https://stackoverflow.com/a/38457886/11187561

我将其放在ngAfterViewInit中,但仍然出现错误。

代码:

ngAfterViewInit() {
    var frame = document.getElementById('your-frame-id');
    frame.contentWindow.postMessage(/*any variable or object here*/, '*');
}

最佳答案

问题在于getElementById返回的是HTMLElement而不是HtmlIFrameElement。您可以做的是定义一个类型防护,以检查frameIFRAME。第二个问题是contentWindow可以为null,因此我们也必须进行检查。

const isIFrame = (input: HTMLElement | null): input is HTMLIFrameElement =>
    input !== null && input.tagName === 'IFRAME';

function ngAfterViewInit() {
    let frame = document.getElementById('your-frame-id');
    if (isIFrame(frame) && frame.contentWindow) {
        frame.contentWindow.postMessage({}, '*');
    }
}

09-26 04:34