I did the following and ensure it came right at the top of all my code:
Code:
// FIREFOX 18 ION BUG FIX
Ext.onReady(function(){
if (Ext.firefoxVersion >= 18) {
var callOverrideParent = function () {
var method = callOverrideParent.caller.caller; // skip callParent (our caller)
try{}catch(e){} // FF 18 fix
return method.$owner.prototype[method.$name].apply(this, arguments);
};
Ext.override = function (target, overrides) {
if (target.$isClass) {
target.override(overrides);
} else if (typeof target == 'function') {
Ext.apply(target.prototype, overrides);
} else {
var owner = target.self, name, value;
if (owner && owner.$isClass) { // if (instance of Ext.define'd class)
for (name in overrides) {
if (overrides.hasOwnProperty(name)) {
value = overrides[name];
if (typeof value == 'function') {
value.$name = name; value.$owner = owner;
value.$previous = target.hasOwnProperty(name) ? target[name] : callOverrideParent;
}
target[name] = value;
}
}
} else {
Ext.apply(target, overrides);
}
}
return target;
};
var noArgs = [];
Ext.override(Ext.Base, {
callParent: function(args) {
var method, superMethod = (method = this.callParent.caller) && (method.$previous ||
((method = method.$owner ? method : method.caller) &&
method.$owner.superclass[method.$name]));
try {} catch (e) {} // Firefox 18 fix
return superMethod.apply(this, args || noArgs);
},
callSuper: function(args) {
var method, superMethod = (method = this.callSuper.caller) &&
((method = method.$owner ? method : method.caller) &&
method.$owner.superclass[method.$name]);
try {} catch (e) {} // Firefox 18 fix
return superMethod.apply(this, args || noArgs);
},
statics: function() {
var self = this.self, method = this.statics.caller;
try {} catch (e) {} // Firefox 18 fix
if (!method) return self;
return method.$owner;
}
});
Ext.override(Ext.Error, {
raise: function(err) {
err = err || {};
if (Ext.isString(err)) {
err = { msg: err };
}
var msg, method = this.raise.caller;
try {} catch (e) {} // Firefox 18 fix
if (method) {
if (method.$name) {
err.sourceMethod = method.$name;
}
if (method.$owner) {
err.sourceClass = method.$owner.$className;
}
}
if (Ext.Error.handle(err) !== true) {
msg = Ext.Error.prototype.toString.call(err);
Ext.log({
msg: msg,
level: 'error',
dump: err,
stack: true
});
throw new Ext.Error(err);
}
}
});
}
});