У меня есть веб-просмотр, внутри этого веб-просмотра мне нужно ввести код js для получения информации, а затем получить эту информацию через onMessage.
Проблема в том, что onMessage никогда не активируется, он не получает никакой информации.
У меня проблема между postMessage и onMessage, похоже, они не общаются.
Я пытаюсь на Android.
Ссылка: Expo
Код:
import React, { Component } from 'react';
import { View, WebView } from 'react-native';
export default class ResolveUrl extends Component {
constructor() {
super();
this.state = {
urlOpenload: '',
code: '',
isMounted: false,
};
}
componentDidMount() {
this.setState({ isMounted: true });
}
componentWillUnmount() {
this.setState({ isMounted: false });
}
Openload(url) {
return new Promise(async (resolve, reject) => {
setTimeout(() => {
if (this.state.isMounted) {
this.setState({ urlOpenload: url });
setInterval(() => {
if (this.state.code != '')
resolve('https://openload.co/stream' + this.state.code);
}, 5000);
}
}, 1000);
});
}
get(type, url) {
type = type.toLowerCase();
return new Promise(async (resolve, reject) => {
switch (type) {
case 'openload':
resolve(this.Openload(url));
break;
}
});
}
render() {
const jsCodeOpenload = `
(function ready() {
function whenRNPostMessageReady(cb) {
if (window.postMessage.length === 1) cb();
else setTimeout(function() { whenRNPostMessageReady(cb) }, 100);
}
whenRNPostMessageReady(function() {
window.postMessage(document.getElementById('lqEH1').innerHTML);
});
})();`;
return (
<View>
{this.state.urlOpenload != '' && (
<WebView
source={{
uri: this.state.urlOpenload,
}}
onMessage={evt => {
alert(evt.nativeEvent.data)
this.setState({ code: evt.nativeEvent.data });
}}
injectedJavaScript={jsCodeOpenload}
javaScriptEnabled
style={{ flex: 1 }}
/>
)}
</View>
);
}
}