diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue index 1f9c336eee..bac7f1e310 100644 --- a/packages/frontend/src/components/MkUrlPreview.vue +++ b/packages/frontend/src/components/MkUrlPreview.vue @@ -133,7 +133,7 @@ let unknownUrl = $ref(false); const requestUrl = new URL(props.url); if (!['http:', 'https:'].includes(requestUrl.protocol)) throw new Error('invalid url'); -if (requestUrl.hostname === 'twitter.com' || requestUrl.hostname === 'mobile.twitter.com') { +if (requestUrl.hostname === 'twitter.com' || requestUrl.hostname === 'mobile.twitter.com' || requestUrl.hostname === 'x.com' || requestUrl.hostname === 'mobile.x.com') { const m = requestUrl.pathname.match(/^\/.+\/status(?:es)?\/(\d+)/); if (m) tweetId = m[1]; } diff --git a/packages/frontend/test/url-preview.test.ts b/packages/frontend/test/url-preview.test.ts index b5fcf9bece..0cf3a417e2 100644 --- a/packages/frontend/test/url-preview.test.ts +++ b/packages/frontend/test/url-preview.test.ts @@ -152,4 +152,13 @@ describe('MkUrlPreview', () => { assert.strictEqual(iframe?.getAttribute('allow'), 'fullscreen;web-share'); assert.strictEqual(iframe?.getAttribute('sandbox'), 'allow-popups allow-scripts allow-same-origin'); }); + + test('Loading a post in iframe', async () => { + const iframe = await renderAndOpenPreview({ + url: 'https://x.com/i/web/status/1685072521782325249', + }); + assert.exists(iframe, 'iframe should exist'); + assert.strictEqual(iframe?.getAttribute('allow'), 'fullscreen;web-share'); + assert.strictEqual(iframe?.getAttribute('sandbox'), 'allow-popups allow-scripts allow-same-origin'); + }); });