是否有可能使用html5语音API进入kitkat的android webview?
我有一个非常简单的网站,它使用html5语音识别API将音频转换为文本。 我的目标是让它在Android的网页视图内工作,但我得到这个错误:是否有可能使用html5语音API进入kitkat的android webview?
“遗漏的类型错误:无法设置属性未定义的‘郎’”,来源:https://example.com/(216)
任何想法?
这里是我的MainActivity:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://example.com/");
}
}
下面是我的javascript:
var final_transcript = '';
var recognizing = false;
if ('webkitSpeechRecognition' in window) {
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onstart = function() {
recognizing = true;
}
recognition.onerror = function(event) {
console.log(event.error);
};
recognition.onend = function() {
recognizing = false;
}
recognition.onresult = function(event) {
var interim_transcript = '';
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
document.getElementById("textresult").innerHTML = linebreak(interim_transcript);
} else {
interim_transcript += event.results[i][0].transcript;
document.getElementById("textresult").innerHTML = linebreak(interim_transcript);
}
}
final_transcript = capitalize(final_transcript);
document.getElementById("textresult").innerHTML = linebreak(interim_transcript);
document.getElementById("textresult").innerHTML = linebreak(final_transcript);
};
}
var two_line = /\n\n/g;
var one_line = /\n/g;
function linebreak(s) {
return s.replace(two_line, '<p></p>').replace(one_line, '<br>');
}
function capitalize(s) {
return s.replace(s.substr(0,1), function(m) { return m.toUpperCase(); });
}
function startDictation(event) {
if (recognizing) {
recognition.stop();
return;
}
final_transcript = '';
recognition.lang = 'en-US';
recognition.start();
final_span.innerHTML = '';
interim_span.innerHTML = '';
}
</script>
你能尝试宣告这条线以上的recognition
变量?
if ('webkitSpeechRecognition' in window)
假设您只错过了在'onEnd'函数上粘贴'}' – Barak
否,结果相同。 }已经在onEnd函数 – RealBadCoder
你有没有试过让你的'recognition'成为一个全局变量?因为我认为这个问题并没有真正的webview语音API的能力,但变量不能在'startDictation'函数中访问 – Barak
您的'识别'变量在不同的范围内 – Barak
我该如何解决? – RealBadCoder
请检查我的答案,并仔细检查窗口中的''webkitSpeechRecognition'是否返回true – Barak