Я загружаю какое-то веб-представление в React Native, используя какой-то URL. После загрузки страницы веб-просмотра у меня есть ссылки на социальные сети на этой веб-странице.
Итак, я пытаюсь открыть эти URL, когда пользователь нажмет на них.
onMessage = (e) => {
// retrieve event data
let data = e.nativeEvent;
console.log('data', data);
// maybe parse stringified JSON
try {
data = JSON.parse(data);
} catch (e) { }
// check if this message concerns us
if (typeof data === 'object' && data.external_url_open) {
// proceed with URL open request
console.log('external_url_open', data.external_url_open);
// Linking.openURL(data.external_url_open);
this.openSocialNetworksURL(data.external_url_open);
}
}
openSocialNetworksURL = (url) => {
Linking.canOpenURL(url).then((supported) => {
if (!supported) {
console.log(`Can't handle url: ${url}`);
} else {
return Linking.openURL(url);
}
}).catch(err => console.error('An error occurred', err));
}
render() {
const injectedJs = '!function(){var e=function(e,n,t){if(n=n.replace(/^on/g,""),"addEventListener"in window)e.addEventListener(n,t,!1);else if("attachEvent"in window)e.attachEvent("on"+n,t);else{var o=e["on"+n];e["on"+n]=o?function(e){o(e),t(e)}:t}return e},n=document.querySelectorAll("a[href]");if(n)for(var t in n)n.hasOwnProperty(t)&&e(n[t],"onclick",function(e){new RegExp("^https?://"+location.host,"gi").test(this.href)||(e.preventDefault(),window.postMessage(JSON.stringify({external_url_open:this.href})))})}();';
return (
<WebView
source={{ uri }}
style={styles.webView}
onLoad={() => this.hideSpinner()}
injectedJavaScript={injectedJs}
onMessage={this.onMessage.bind(this)}
scalesPageToFit
javaScriptEnabledAndroid
javaScriptEnabled
onError={(err) => {
this.hideSpinner();
}}
/>
);
}
URL-адрес, который я получаю с этой страницы:
«данные», {данные:
'{"external_url_open": "https://www.facebook.com/somepage/"}'}
Но, это ничего не раскрывает. в Android, по крайней мере, его журнал консоли печати, но, само веб-представление iOS выдает сбой.
Есть предложения?