fix: guard against Brave user-script fake SpeechSynthesisVoice proxy (#63)

Brave on iOS injects a user-script that wraps SpeechSynthesisVoice objects
with a fake proxy. Accessing v.lang on the proxy threw 'undefined is not an
object (evaluating Object.getPrototypeOf(voice))'.

Fix: wrap the v.lang access in _initBrowserTtsVoices filter() inside its
own try/catch — bad proxies are silently discarded.
This commit is contained in:
dadaloop82
2026-05-16 16:28:06 +00:00
parent 89b8686f4f
commit b82b4d9d94
+4 -1
View File
@@ -12663,7 +12663,10 @@ function _initBrowserTtsVoices(selectedVoice) {
const populate = () => {
let voices = [];
try {
voices = (window.speechSynthesis.getVoices() || []).filter(v => v != null && v.lang);
voices = (window.speechSynthesis.getVoices() || []).filter(v => {
try { return v != null && typeof v.lang === 'string' && v.lang.length > 0; }
catch (_) { return false; }
});
} catch (_) { return false; }
if (!voices.length) return false;
// Italian voices first, then others