Javascript 如何在webview内联html中使用expo speech
大家好,我正在尝试使用世博会演讲来阅读我的网络视图中的文本 因为我不能在webview中使用javascript语音合成,所以有点难破解 下面是expo语音文档中的示例,我有下面的代码,我还使用以下代码将语音注入html: ${说(说)} 错误是找不到变量语句,我知道错误原因,但我不知道如何将文本传递给函数speak 请检查我下面的代码。 谢谢Javascript 如何在webview内联html中使用expo speech,javascript,react-native,webview,expo,Javascript,React Native,Webview,Expo,大家好,我正在尝试使用世博会演讲来阅读我的网络视图中的文本 因为我不能在webview中使用javascript语音合成,所以有点难破解 下面是expo语音文档中的示例,我有下面的代码,我还使用以下代码将语音注入html: ${说(说)} 错误是找不到变量语句,我知道错误原因,但我不知道如何将文本传递给函数speak 请检查我下面的代码。 谢谢 import*as React from'React'; 从“react native”导入{视图、样式表、按钮}; 从“世博演讲”中导入*作为演讲;
import*as React from'React';
从“react native”导入{视图、样式表、按钮};
从“世博演讲”中导入*作为演讲;
从“react native WebView”导入{WebView};
导出默认函数App(){
const speak=(thingToSay)=>{
说话,说话(说话);
};
常量html=`
电子阅读器
待读内容
onload=函数(){
var playEle=document.querySelector(“#play”);
var pauseEle=document.querySelector(“#pause”);
var stopEle=document.querySelector('#stop');
var标志=假;
playEle.addEventListener('click',onClickPlay);
pauseEle.addEventListener('click',onClickPause);
stopEle.addEventListener('click',onClickStop);
函数onClickPlay(){
如果(!标志){
flag=true;
话语=document.getElementsById('readme').innerText;
${说(说)};
}
}
}
`;
返回(
);
}
好的,经过大量研究,我在这个博客上看到了webview的window.ReactNativeWebView.postMessage和onMessage道具:
所以我所需要做的就是从我的html中点击按钮返回一条消息,并将消息传递给onMessage,onMessage随后调用世博会演讲来阅读返回的文本。
请检查以下代码以供参考:
<script>
var playEle = document.querySelector('#play');
var pauseEle = document.querySelector('#pause');
var stopEle = document.querySelector('#stop');
playEle.addEventListener('click', onClickPlay);
pauseEle.addEventListener('click', onClickPause);
stopEle.addEventListener('click', onClickStop);
function onClickPlay() {
window.ReactNativeWebView.postMessage(document.getElementsByTagName('iframe')[0].contentWindow.document.body.innerText);
}
function onClickPause() {
window.ReactNativeWebView.postMessage('pause');
}
function onClickStop() {
window.ReactNativeWebView.postMessage('stop');
}
var playEle=document.querySelector(“#play”);
var pauseEle=document.querySelector(“#pause”);
var stopEle=document.querySelector('#stop');
playEle.addEventListener('click',onClickPlay);
pauseEle.addEventListener('click',onClickPause);
stopEle.addEventListener('click',onClickStop);
函数onClickPlay(){
window.ReactNativeWebView.postMessage(document.getElementsByTagName('iframe')[0].contentWindow.document.body.innerText);
}
函数onClickPause(){
window.reactivewebview.postMessage('pause');
}
函数onClickStop(){
window.reactivewebview.postMessage('stop');
}
从网络视图:
onMessage(m) {
if(m.nativeEvent.data === "pause"){
Speech.pause();
} else if(m.nativeEvent.data === "stop"){
Speech.stop();
}else{
Speech.speak(m.nativeEvent.data);
}
}
<WebView
source={{ html: html }}
javaScriptEnabled={true}
onMessage={m => this.onMessage(m)}
/>
onMessage(m){
如果(m.nativeEvent.data==“暂停”){
暂停;
}否则如果(m.nativeEvent.data==“停止”){
演讲。停止();
}否则{
Speech.speak(m.nativeEvent.data);
}
}
this.onMessage(m)}
/>
onMessage(m) {
if(m.nativeEvent.data === "pause"){
Speech.pause();
} else if(m.nativeEvent.data === "stop"){
Speech.stop();
}else{
Speech.speak(m.nativeEvent.data);
}
}
<WebView
source={{ html: html }}
javaScriptEnabled={true}
onMessage={m => this.onMessage(m)}
/>