diff --git a/android/modules/ui/src/js/tabgroup.js b/android/modules/ui/src/js/tabgroup.js index 3041c20b493..80caa24b971 100644 --- a/android/modules/ui/src/js/tabgroup.js +++ b/android/modules/ui/src/js/tabgroup.js @@ -164,4 +164,42 @@ exports.bootstrap = function (Titanium) { Object.defineProperty(TabGroup.prototype, 'tabs', { get: TabGroup.prototype.getTabs, set: TabGroup.prototype.setTabs }); Object.defineProperty(TabGroup.prototype, 'activeTab', { get: TabGroup.prototype.getActiveTab, set: TabGroup.prototype.setActiveTab }); + // Avoid circular loops in toJSON() + Object.defineProperty(TabGroup.prototype, 'toJSON', { + value: function () { + const keys = Object.keys(this); + const keyCount = keys.length; + const serialized = {}; + + for (let i = 0; i < keyCount; i++) { + const k = keys[i]; + if (k === 'activity' || k.charAt(0) === '_') { + continue; + } + serialized[k] = this[k]; + } + + return serialized; + }, + enumerable: false + }); + + Object.defineProperty(Titanium.UI.Tab.prototype, 'toJSON', { + value: function () { + const keys = Object.keys(this); + const keyCount = keys.length; + const serialized = {}; + + for (let i = 0; i < keyCount; i++) { + const k = keys[i]; + if (k === 'window' || k === 'tabGroup' || k.charAt(0) === '_') { + continue; + } + serialized[k] = this[k]; + } + + return serialized; + }, + enumerable: false + }); };