Переделал хак. Даже вторая проблема пропала.
Ext.define("MyApp.override.ux.IFrame", {
override: "Ext.ux.IFrame",
loadMask: "<div style='text-align: center'>Подождите,<br/>загружается страница...</div>",
getRandomSuffixId: function() {
return "-iframe-" + Math.round(Math.random() * 100000);
},
getRandomId: function(prefix) {
return prefix + this.getRandomSuffixId();
},
setWinDocRandomId: function() {
this._prevdocid = this.getDoc().id;
this._prevwinid = this.getWin().id;
this.getDoc().id = this.getRandomId("ext-document");
this.getWin().id = this.getRandomId("ext-window");
},
unsetWinDocRandomId: function() {
this.getDoc().id = this._prevdocid;
this.getWin().id = this._prevwinid;
},
onLoad: function() {
this.setWinDocRandomId();
this.callParent();
this.unsetWinDocRandomId();
},
cleanupListeners: function() {
this.setWinDocRandomId();
this.callParent();
this.unsetWinDocRandomId();
}
});
Пока вроде все работает. Но из-за того, что меняются id (которые явно используются фреймворком) неизвестно какие будут последствия (несмотря на то, что их значения я потом восстанавливаю).