Javascript 有可能在kitkat的android webview中使用html5语音API吗?
我有一个非常简单的网站,它使用html5语音识别API将音频转换为文本。 我的目标是让它在Android的webview中工作,但我遇到了以下错误: “未捕获的TypeError:无法设置未定义的属性'lang',来源: 有什么想法吗 这是我的主要活动:Javascript 有可能在kitkat的android webview中使用html5语音API吗?,javascript,java,android,android-studio,webview,Javascript,Java,Android,Android Studio,Webview,我有一个非常简单的网站,它使用html5语音识别API将音频转换为文本。 我的目标是让它在Android的webview中工作,但我遇到了以下错误: “未捕获的TypeError:无法设置未定义的属性'lang',来源: 有什么想法吗 这是我的主要活动: import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.WebSettings; import andro
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/");
}
}
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>
这是我的javascript:
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/");
}
}
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>
var最终成绩单=”;
var=false;
if(窗口中的“webkitSpeechRecognition”){
var recognition=new-webkitSpeechRecognition();
识别。连续=正确;
recognition.interimResults=true;
recognition.onstart=函数(){
识别=正确;
}
recognition.onerror=功能(事件){
console.log(event.error);
};
recognition.onend=函数(){
识别=错误;
}
recognition.onresult=函数(事件){
var临时_转录本=“”;
对于(var i=event.resultIndex;i”);
}
功能资本化{
返回s.replace(s.substr(0,1),函数(m){返回m.toUpperCase();});
}
功能启动检测(事件){
如果(识别){
识别。停止();
返回;
}
最终成绩单=“”;
recognition.lang='en-US';
识别。开始();
final_span.innerHTML='';
临时的span.innerHTML='';
}
能否尝试在此行上方声明您的识别
变量
if ('webkitSpeechRecognition' in window)
您可以尝试在此行上方声明您的
识别变量吗
if ('webkitSpeechRecognition' in window)
您的recognition
变量在不同的范围内如何修复它?请检查我的答案并再次检查窗口中的'webkitSpeechRecognition'是否返回true您的recognition
变量在不同的范围内如何修复它?请检查我的答案并再次检查'webkitSpeechRecognition'是否在window
返回True,假设您只是错过了在ONED
函数上粘贴}
,您是否尝试将识别设置为全局变量?因为我认为webview中的语音api功能实际上不存在问题,但变量在startDictation
函数中不可访问。您是否检查了窗口中的'webkitSpeechRecognition'是否返回真值?是的,它返回真值。我也在chrome中尝试了js,它可以工作,但在webview内部,这并不意味着你只是错过了在你的onEnd
函数上粘贴}
,你试过让你的识别成为一个全局变量吗?因为我认为webview中的语音api功能实际上不存在问题,但变量在startDictation
函数中不可访问。您是否检查了窗口中的'webkitSpeechRecognition'是否返回真值?是的,它返回真值。我也在chrome中试用了js,它可以工作,但在webview中却不行