fix(support-chat): support legacy mobile browsers

This commit is contained in:
t
2026-08-30 12:29:22 +08:00
parent 12c7060dbe
commit 46144ef63a
8 changed files with 302 additions and 101 deletions
+49
View File
@@ -116,6 +116,7 @@ func TestSupportChatUsesRealtimeUIWithoutMessagePolling(t *testing.T) {
"你可以继续留言",
"等待期间可以继续留言",
`String(event.type || "").startsWith("conversation.")`,
`image.addEventListener("error"`,
} {
if !strings.Contains(source, marker) {
t.Fatalf("support chat queue flow does not contain %q", marker)
@@ -129,6 +130,54 @@ func TestSupportChatUsesRealtimeUIWithoutMessagePolling(t *testing.T) {
}
}
func TestSupportChatKeepsOlderMobileWebViewsCompatible(t *testing.T) {
script, err := assets.ReadFile("assets/chat.js")
if err != nil {
t.Fatalf("read support chat script: %v", err)
}
source := string(script)
for _, forbidden := range []string{
"?.",
"??",
"||=",
".at(",
".flat(",
".replaceAll(",
".replaceChildren(",
} {
if strings.Contains(source, forbidden) {
t.Fatalf("support chat must not require newer mobile JavaScript API or syntax %q", forbidden)
}
}
for _, marker := range []string{
"function lastItem",
"function replaceChildrenCompat",
`window.crypto && window.crypto.randomUUID`,
`Array.from(map.values())`,
} {
if !strings.Contains(source, marker) {
t.Fatalf("support chat compatibility flow does not contain %q", marker)
}
}
stylesheet, err := assets.ReadFile("assets/chat.css")
if err != nil {
t.Fatalf("read support chat stylesheet: %v", err)
}
css := string(stylesheet)
for _, fallback := range []string{
`background: linear-gradient(145deg, #3c80fb, #4c66ea);`,
`background: linear-gradient(135deg, #397ffb, #5368ed);`,
`background: #eaf2ff;`,
`top: 0; right: 0; bottom: 0; left: 0; inset: 0;`,
`width: 100%; max-width: 360px; width: min(100%, 360px);`,
} {
if !strings.Contains(css, fallback) {
t.Fatalf("support chat stylesheet does not contain older mobile fallback %q", fallback)
}
}
}
func TestSupportChatStagesUploadsUntilExplicitSend(t *testing.T) {
script, err := assets.ReadFile("assets/chat.js")
if err != nil {