これは、iFrameのhtmlページが親ページと同じアプリケーションからのものである場合にのみ機能します。または、少なくともプロトコル、サブドメイン、ドメイン、およびポートはすべて同じです。
親ページで、子ページ(iframe)で実行されているJavaScriptによって呼び出されるグローバル関数を公開する必要があります。
子ページで次のように呼び出します。
if (window.parent && window.parent.myGlobalFunction) {
window.parent.myGlobalFunction('hello!');
}
親ページには、次のグローバル関数を含めます(もちろん必要に応じて名前を付けます)。
function myGlobalFunction(input){
console.log('message received:'+input);
MyApp.app.fireEvent('closeMyWindow',input);
}
これは、MVCを使用していて、プロパティ「app」を作成し、アプリケーション起動関数で「this」に設定したことを前提としています。そして、次のようなアプリケーション全体のイベントをリッスンしているコントローラーがあること。
Ext.define('MyApp.controller.Qnum', {
extend:'Ext.app.Controller',
init:function(){
this.control({
...
});
//listen for app wide event fired by : MyApp.app.fireEvent('closeMyWindow',input);
this.application.on({
closeMyWindow: this.closeWindowItsDrafty,
scope: this
});
},
closeWindowItsDrafty:function(){
//get reference to my window
//call myWindow.close();
}