目标/背景:我需要将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
。您可以做的是定义一个类型防护,以检查frame
是IFRAME
。第二个问题是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({}, '*');
}
}