fix(mac): render Canvas HTML correctly

This commit is contained in:
Peter Steinberger
2025-12-12 20:01:12 +00:00
parent 27a7d9f9d1
commit 4ecd35c275
2 changed files with 19 additions and 8 deletions

View File

@@ -20,10 +20,12 @@ enum CanvasScheme {
static func mimeType(forExtension ext: String) -> String {
switch ext.lowercased() {
case "html", "htm": "text/html; charset=utf-8"
case "js", "mjs": "application/javascript; charset=utf-8"
case "css": "text/css; charset=utf-8"
case "json", "map": "application/json; charset=utf-8"
// Note: WKURLSchemeHandler uses URLResponse(mimeType:), which expects a bare MIME type
// (no `; charset=...`). Encoding is provided via URLResponse(textEncodingName:).
case "html", "htm": "text/html"
case "js", "mjs": "application/javascript"
case "css": "text/css"
case "json", "map": "application/json"
case "svg": "image/svg+xml"
case "png": "image/png"
case "jpg", "jpeg": "image/jpeg"
@@ -37,4 +39,3 @@ enum CanvasScheme {
}
}
}

View File

@@ -22,12 +22,13 @@ final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler {
let response = self.response(for: url)
let mime = response.mime
let data = response.data
let encoding = self.textEncodingName(forMimeType: mime)
let urlResponse = URLResponse(
url: url,
mimeType: mime,
expectedContentLength: data.count,
textEncodingName: "utf-8")
textEncodingName: encoding)
urlSchemeTask.didReceive(urlResponse)
urlSchemeTask.didReceive(data)
urlSchemeTask.didFinish()
@@ -175,7 +176,7 @@ final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler {
</body>
</html>
"""
return CanvasResponse(mime: "text/html; charset=utf-8", data: Data(html.utf8))
return CanvasResponse(mime: "text/html", data: Data(html.utf8))
}
private func welcomePage(sessionRoot: URL) -> CanvasResponse {
@@ -190,5 +191,14 @@ final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler {
"""
return self.html(body, title: "Canvas")
}
}
private func textEncodingName(forMimeType mimeType: String) -> String? {
if mimeType.hasPrefix("text/") { return "utf-8" }
switch mimeType {
case "application/javascript", "application/json", "image/svg+xml":
return "utf-8"
default:
return nil
}
}
}