Skip to content

Commit

Permalink
bugfix checking media-type
Browse files Browse the repository at this point in the history
  • Loading branch information
martrapp committed Sep 13, 2023
1 parent 299ec3e commit 819581d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
5 changes: 5 additions & 0 deletions .changeset/sixty-beds-give.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

bugfix checking media-type in client-side router
25 changes: 12 additions & 13 deletions packages/astro/components/ViewTransitions.astro
Original file line number Diff line number Diff line change
Expand Up @@ -65,19 +65,19 @@ const { fallback = 'animate' } = Astro.props as Props;
};

async function getHTML(href: string) {
let res;
try {
res = await fetch(href);
const res = await fetch(href);
const html = await res.text();
return {
ok: res.ok,
html,
redirected: res.redirected ? res.url : undefined,
// drop potential charset (+ other name/value pairs) as parser needs the mediaType
mediaType: res.headers.get('content-type')?.replace(/;.*/, ''),
};
} catch (err) {
return { ok: false };
}
const html = await res.text();
return {
ok: res.ok,
html,
redirected: res.redirected ? res.url : undefined,
contentType: res.headers.get('content-type'),
};
}

function getFallback(): Fallback {
Expand Down Expand Up @@ -290,17 +290,16 @@ const { fallback = 'animate' } = Astro.props as Props;
async function navigate(dir: Direction, loc: URL, state?: State) {
let finished: Promise<void>;
const href = loc.href;
const { html, ok, contentType, redirected } = await getHTML(href);
const mediaType = contentType?.replace(/;.*/, '');
const { html, ok, mediaType, redirected } = await getHTML(href);
// if there was a redirection, show the final URL in the browser's address bar
redirected && (loc = new URL(redirected));
// If there is a problem fetching the new page, just do an MPA navigation to it.
if (!ok || mediaType !== 'text/html') {
if (!ok || !(mediaType === 'text/html' || mediaType === 'application/xhtml+xml')) {
location.href = href;
return;
}

const doc = parser.parseFromString(html, contentType);
const doc = parser.parseFromString(html, mediaType);
if (!doc.querySelector('[name="astro-view-transitions-enabled"]')) {
location.href = href;
return;
Expand Down

0 comments on commit 819581d

Please sign in to comment.