У меня есть приложение React Native, созданное с помощью Expo.На Как добавить ссылки во всплывающую подсказку Highcharts, которая открывается в браузере мобильного телефона? Мне удалось передать URL-адрес в Highcharts, чтобы при нажатии всплывающей подсказки открывался этот URL:
return(
<View style={styles.container}>
<ChartView
onMessage={m => this.onMessage(m)}
config={config}
/>
</View>
Этот метод вызывает этот метод для открытия URL:
onMessage = (m) => {
let data = JSON.parse(m.nativeEvent.data);
Linking.openURL(data.url)
};
И URL заполняется через глобальную переменную window.myURL
и отправляет сообщение с postMessage()
:
render() {
let Highcharts = "Highcharts";
let config ={
...
plotOptions: {
series: {
stickyTracking: false,
point: {
events: {
click: function(e) {
window.postMessage(JSON.stringify({'url': window.myUrl}));
}
}
}
},
},
tooltip: {
useHTML: true,
formatter: function () {
window.myUrl = extras.url;
return `<div class="text">some text</div>`;
}
};
Это хорошо работает на iOS (как физическом, так и на эмуляторе), но не на Android (ни на физическом, ни на эмуляторе).
Я сталкивался с различными проблемами с Github, такими как onMessage не вызывается в собственном коде, даже если отправлено из webview (android) и реагируют на нативный html postMessage не может достичь WebView , и они, как правило, предлагают использовать некоторый таймаут на window.postMessage()
.Однако я вижу, что даже это не работает:
plotOptions: {
series: {
point: {
events: {
click: function(e) {
setTimeout(function() {
console.log('bla');
window.postMessage(JSON.stringify({'url': window.myUrl}));
}, 200);
}
}
}
},
},
Поскольку даже console.log()
не работает, мне кажется, что событие click
не перехватывается Android.
Как я могу сообщить Android об этом событии, чтобы я мог просмотреть сообщение и затем открыть URL-адрес?