是否有可能使用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> 
+0

您的'识别'变量在不同的范围内 – Barak

+0

我该如何解决? – RealBadCoder

+0

请检查我的答案,并仔细检查窗口中的''webkitSpeechRecognition'是否返回true – Barak

你能尝试宣告这条线以上的recognition变量?

if ('webkitSpeechRecognition' in window) 
+0

假设您只错过了在'onEnd'函数上粘贴'}' – Barak

+0

否,结果相同。 }已经在onEnd函数 – RealBadCoder

+0

你有没有试过让你的'recognition'成为一个全局变量?因为我认为这个问题并没有真正的webview语音API的能力,但变量不能在'startDictation'函数中访问 – Barak