私はAngular 2プロジェクトとNodeJsプロジェクトを持っています。 Angular 2アプリにiframeがあり、その中にNodeJSアプリを表示したいと思います。 Angular2からNodeJsにpostMessage()メソッドを使い、NodeJsからAngular2に戻したいと思います。 Angular2 Addressはhttp://localhost:3001、NodeJsアドレスはhttp://localhost:3005です。Angular2 - iframe.contentWindowの取得に問題があり、postMessage()を呼び出すときにエラーが発生する
角2では、このようなコンポーネントにテンプレートがあります。
template: `<iframe id="ifrm" #ifrm [src]="iframeURL()" width="500" height="200"> <p> Your browser does not support iframes</p> </iframe> `
iframeURL()メソッド本体がテンプレートで使用されます。
iframeURL() {
return this.sanitizer.bypassSecurityTrustResourceUrl('http://localhost:3005');
}
私はAngular2にiframe内のページを見ることができるアプリケーションを実行すると。しかしiframeのcontentWindow(下のコード)を取得したいとき、私は以下の説明を得ます(エラーではありません)。
@ViewChild('ifrm') iframe: ElementRef;
例外処理:DOMException:原点にフレームをブロックされた "http://localhost:3001" クロスオリジン・フレームをアクセスします。
以下のようなpostMessage()メソッドを使用すると例外が発生します。
this.iframe.nativeElement.contentWindow.postMessage('{}','http://localhost:3005');
'DOMWindow' オン 'のpostMessage' を実行できませんでした:指定されたターゲット原点 は( 'http://localhost:3005 ')(' http://localhost:3001')受信者 ウィンドウの原点と一致していません。
ところで、このコンポーネントページを角度ルーティングを使用して開きます。 全体のコンポーネントコードは以下の通りです:
import {Component, OnInit, ElementRef} from '@angular/core';
import {DomSanitizer} from '@angular/platform-browser'
import {ViewChild} from "@angular/core/src/metadata/di";
@Component({
selector: 'app',
template: `<div> <iframe id="ifrm" #ifrm [src]="iframeURL()" width="500" height="200" style="/*display:none;*/"> <p> Your browser does not support iframes</p> </iframe> </div>`
})
export class AppComponent implements OnInit{
constructor(private sanitizer: DomSanitizer){}
@ViewChild('ifrm') iframe: ElementRef;
ngOnInit(){
console.log(this.iframe.nativeElement.contentWindow);
this.iframe.nativeElement.contentWindow.postMessage('{}', 'http://localhost:3005');
}
iframeURL() {
return this.sanitizer.bypassSecurityTrustResourceUrl('http://localhost:3005');
}
}
任意の助けいただければ幸いです。 –