Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在webview内联html中使用expo speech_Javascript_React Native_Webview_Expo - Fatal编程技术网

Javascript 如何在webview内联html中使用expo speech

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”导入{视图、样式表、按钮}; 从“世博演讲”中导入*作为演讲;

大家好,我正在尝试使用世博会演讲来阅读我的网络视图中的文本

因为我不能在webview中使用javascript语音合成,所以有点难破解

下面是expo语音文档中的示例,我有下面的代码,我还使用以下代码将语音注入html:

${说(说)}

错误是找不到变量语句,我知道错误原因,但我不知道如何将文本传递给函数speak

请检查我下面的代码。 谢谢

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)}
     />