Javascript 有可能在kitkat的android webview中使用html5语音API吗?

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

我有一个非常简单的网站,它使用html5语音识别API将音频转换为文本。 我的目标是让它在Android的webview中工作,但我遇到了以下错误:

“未捕获的TypeError:无法设置未定义的属性'lang',来源:

有什么想法吗

这是我的主要活动:

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中却不行