diff --git a/userscript/source/index.ts b/userscript/source/index.ts index 1ea1e53..14ae5b4 100644 --- a/userscript/source/index.ts +++ b/userscript/source/index.ts @@ -285,35 +285,17 @@ export function RunNamuLinkUserscript(BrowserWindow: typeof window, UserscriptNa return Stringified.includes('https://ader.naver.com/') } - function ProxySetHandlerTargetCheck(Target: object): boolean { - for (const PropertyName of Object.keys(Target)) { - const Value = (Target as Record)[PropertyName] - const Descriptor = OriginalObjectGetOwnPropertyDescriptor(Target, PropertyName) - - if ( - typeof Value === 'object' && - Value !== null && - typeof Descriptor?.get !== 'function' - ) { - if (ProxySetHandlerTargetCheck(Value)) { - return true - } - } else if ( - typeof Value === 'string' && - Value.includes('ader.naver.com') - ) { - return true - } + function ProxySetHandlerTargetCheck( + Target: object, + Visited = new WeakSet() + ): boolean { + if (Visited.has(Target)) { + return false } + Visited.add(Target) - return false - } - - function ProxySetHandlerTargetCheckAndReplace(Target: object, NewValue: string): boolean { - const Record = Target as Record - - for (const PropertyName of Object.keys(Record)) { - const Value = Record[PropertyName] + for (const PropertyName of Object.keys(Target)) { + const Value = (Target as Record)[PropertyName] const Descriptor = OriginalObjectGetOwnPropertyDescriptor(Target, PropertyName) if ( @@ -321,14 +303,13 @@ export function RunNamuLinkUserscript(BrowserWindow: typeof window, UserscriptNa Value !== null && typeof Descriptor?.get !== 'function' ) { - if (ProxySetHandlerTargetCheckAndReplace(Value, NewValue)) { + if (ProxySetHandlerTargetCheck(Value, Visited)) { return true } } else if ( typeof Value === 'string' && Value.includes('ader.naver.com') ) { - Record[PropertyName] = NewValue return true } } @@ -438,9 +419,6 @@ export function RunNamuLinkUserscript(BrowserWindow: typeof window, UserscriptNa BrowserWindow.document.dispatchEvent(new CustomEvent('PL2PlaceHolderProxy')) return } - else if (ProxySetHandlerTargetCheckAndReplace(SetArgs[0], '')) { - console.debug(`[${UserscriptName}]: Proxy set called for PowerLink Skeleton (target check and replace):`, SetArgs) - } return OriginalReflectApply(OriginalSet, this, SetArgs) } }