Свойство 'contentWindow' не существует для типа HTMLElement - отправка с одного сервера на другой - PullRequest
0 голосов
/ 12 июня 2019

Цель / Фон : мне нужно отправить значение переменной из моего приложения Angular в ChatServer (aspx с javascript), который находится внутри iFrame на странице. Он находится на другом сервере.

Что я пробовал : я следую обходной путь здесь: 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*/, '*'); 
}

1 Ответ

0 голосов
/ 12 июня 2019

Проблема в том, что getElementById возвращает HTMLElement, а не HtmlIFrameElement. Что вы можете сделать, это определить тип защиты, чтобы убедиться, что frame является IFRAME. Вторая проблема заключается в том, что contentWindow может быть нулевым, поэтому мы также должны это проверить.

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({}, '*');
    }
}
...