From afbe254362594973d40dd5c77ed9b4227d64fcf1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 21 Mar 2025 11:12:21 -0500 Subject: [PATCH 1/2] fix: allow get_proxied_value to return original value when error closes #15546 --- .changeset/afraid-penguins-battle.md | 5 +++++ packages/svelte/src/internal/client/proxy.js | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 .changeset/afraid-penguins-battle.md diff --git a/.changeset/afraid-penguins-battle.md b/.changeset/afraid-penguins-battle.md new file mode 100644 index 000000000000..2cc5059b9a43 --- /dev/null +++ b/.changeset/afraid-penguins-battle.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: prevent dev server from throwing errors when attempting to retrieve the proxied value of an iframe's contentWindow diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index 29828a7c995d..91344533ba5a 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -327,8 +327,18 @@ function update_version(signal, d = 1) { * @param {any} value */ export function get_proxied_value(value) { - if (value !== null && typeof value === 'object' && STATE_SYMBOL in value) { - return value[STATE_SYMBOL]; + try { + if (value !== null && typeof value === 'object' && STATE_SYMBOL in value) { + return value[STATE_SYMBOL]; + } + } catch (err) { + // the above if check can throw an error if the value in question + // is the contentWindow of an iframe on another domain, in which + // case we want to just return the value (because it's definitely + // not a proxied value) so we don't break any JavaScript interacting + // with that iframe (such as various payment companies client side + // JavaScript libraries interacting with their iframes on the same + // domain) } return value; From fcf67ee561ce78f30eb127ac7041de592e14fe85 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 21 Mar 2025 15:39:09 -0400 Subject: [PATCH 2/2] Update packages/svelte/src/internal/client/proxy.js --- packages/svelte/src/internal/client/proxy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index 91344533ba5a..2b7e7c236b13 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -331,7 +331,7 @@ export function get_proxied_value(value) { if (value !== null && typeof value === 'object' && STATE_SYMBOL in value) { return value[STATE_SYMBOL]; } - } catch (err) { + } catch { // the above if check can throw an error if the value in question // is the contentWindow of an iframe on another domain, in which // case we want to just return the value (because it's definitely