Skip to content

Commit 5619089

Browse files
committed
fix: iframe src set to about:blank
1 parent 0588f93 commit 5619089

3 files changed

Lines changed: 52 additions & 25 deletions

File tree

src/lib/web-worker/worker-iframe.ts

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,36 +30,38 @@ export const patchHTMLIFrameElement = (WorkerHTMLIFrameElement: any) => {
3030
return src;
3131
},
3232
set(src: string) {
33-
let xhr = new XMLHttpRequest();
34-
let xhrStatus: number;
35-
let env = getIframeEnv(this);
33+
if (!src.startsWith('about')) {
34+
let xhr = new XMLHttpRequest();
35+
let xhrStatus: number;
36+
let env = getIframeEnv(this);
3637

37-
env.$location$.href = src = resolveUrl(getEnv(this), src);
38-
env.$isLoading$ = 1;
38+
env.$location$.href = src = resolveUrl(getEnv(this), src);
39+
env.$isLoading$ = 1;
3940

40-
setInstanceStateValue(this, StateProp.loadErrorStatus, undefined);
41+
setInstanceStateValue(this, StateProp.loadErrorStatus, undefined);
4142

42-
xhr.open('GET', src, false);
43-
xhr.send();
44-
xhrStatus = xhr.status;
43+
xhr.open('GET', src, false);
44+
xhr.send();
45+
xhrStatus = xhr.status;
4546

46-
if (xhrStatus > 199 && xhrStatus < 300) {
47-
setter(
48-
this,
49-
['srcdoc'],
50-
`<base href="${src}">` +
51-
xhr.responseText
52-
.replace(/<script>/g, `<script type="${SCRIPT_TYPE}">`)
53-
.replace(/<script /g, `<script type="${SCRIPT_TYPE}" `)
54-
.replace(/text\/javascript/g, SCRIPT_TYPE) +
55-
getPartytownScript()
56-
);
47+
if (xhrStatus > 199 && xhrStatus < 300) {
48+
setter(
49+
this,
50+
['srcdoc'],
51+
`<base href="${src}">` +
52+
xhr.responseText
53+
.replace(/<script>/g, `<script type="${SCRIPT_TYPE}">`)
54+
.replace(/<script /g, `<script type="${SCRIPT_TYPE}" `)
55+
.replace(/text\/javascript/g, SCRIPT_TYPE) +
56+
getPartytownScript()
57+
);
5758

58-
sendToMain(true);
59-
webWorkerCtx.$postMessage$([WorkerMessageType.InitializeNextScript, env.$winId$]);
60-
} else {
61-
setInstanceStateValue(this, StateProp.loadErrorStatus, xhrStatus);
62-
env.$isLoading$ = 0;
59+
sendToMain(true);
60+
webWorkerCtx.$postMessage$([WorkerMessageType.InitializeNextScript, env.$winId$]);
61+
} else {
62+
setInstanceStateValue(this, StateProp.loadErrorStatus, xhrStatus);
63+
env.$isLoading$ = 0;
64+
}
6365
}
6466
},
6567
},

tests/platform/iframe/iframe.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ test('iframe', async ({ page }) => {
6161
const testAboutBlankSrc = page.locator('#testAboutBlankSrc');
6262
await expect(testAboutBlankSrc).toHaveText('');
6363

64+
const testSetAboutBlankHref = page.locator('#testSetAboutBlankHref');
65+
const testSetAboutBlankSrc = page.locator('#testSetAboutBlankSrc');
66+
await expect(testSetAboutBlankSrc).toHaveText('about:blank');
67+
await expect(testSetAboutBlankHref).toHaveText('');
68+
6469
await page.waitForSelector('.testSetCallWindowParentFn');
6570
const testSetCallWindowParentFn = page.locator('#testSetCallWindowParentFn');
6671
await expect(testSetCallWindowParentFn).toHaveText('1985 1985');

tests/platform/iframe/index.html

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,26 @@ <h1>Iframe</h1>
399399
</script>
400400
</li>
401401

402+
<li>
403+
<strong>set about:blank location</strong>
404+
<code id="testSetAboutBlankHref">--</code>
405+
<code id="testSetAboutBlankSrc">--</code>
406+
<script type="text/partytown">
407+
(function () {
408+
const elm = document.getElementById('testSetAboutBlankHref');
409+
410+
const iframe = document.createElement('iframe');
411+
iframe.src = 'about:blank';
412+
elm.parentNode.appendChild(iframe);
413+
414+
const elm2 = document.getElementById('testSetAboutBlankSrc');
415+
elm2.textContent = String(iframe.contentWindow.location.href);
416+
417+
elm.textContent = String(iframe.src);
418+
})();
419+
</script>
420+
</li>
421+
402422
<li>
403423
<strong>set/call window.parent.fn()</strong>
404424
<code id="testSetCallWindowParentFn"></code>

0 commit comments

Comments
 (0)