У меня есть 1 HTML, и мне нужно получить все атрибуты src тега изображения. Все работает отлично (iOS, Android Virtual Machine, iOS-устройство), но только Android-устройство, я не могу получить атрибут src !! Пожалуйста, помогите мне! Спасибо !!
My WebView
render() {
const { source, style, ...otherProps } = this.props;
const { realContentHeight } = this.state;
const html = source.html;
const number = this.addHeight(html);
const addHeightMore = number * 220;
return (
<View style={{ flex: 1 }}>
<View
style={{
paddingHorizontal: 5,
}}
>
<WebView
{...otherProps}
source={{
html:`
<head></head>
<body style="font-size: ${sizeText}; text-align: left; padding: 5">
${templates[this.props.template](html)}
</body>
`
}}
onLoad={this.onLoad.bind(this)}
injectedJavaScript={this.injectedJavaScript()}
mixedContentMode={'compatibility'}
onMessage={this.onMessage.bind(this)}
scrollEnabled={false}
style={[{ height: Platform.OS === 'ios' ? realContentHeight : realContentHeight < screenHeight ? screenHeight : realContentHeight + addHeightMore}, style]}
javaScriptEnabled
/>
</View>
</View>
)
}
injectedJavascript ()
injectedJavaScript() {
return `
${this.hackBefore()}
function dispatchAction(action, params) {
window.postMessage(JSON.stringify({
action,
params,
}));
};
var imgs = [];
document.querySelectorAll('img:not(.emoji):not(.embedded-img):not(.embedded-btn)').forEach(function (img, index) {
var src = img.getAttribute('src');
imgs.push(src);
img.addEventListener('click', function (event) {
dispatchAction('openGallery', {
index: index,
});
});
});
dispatchAction('addImages', {
imgs: imgs,
});
${this.hackAfter()}
`
}
hackBefore
hackBefore () {
вернуть Platform.OS === 'ios'?
(function(){
var originalPostMessage = window.postMessage;
var patchedPostMessage = function(message, targetOrigin, transfer) {
originalPostMessage(message, targetOrigin, transfer);
};
patchedPostMessage.toString = function() {
return String(Object.hasOwnProperty).replace('hasOwnProperty', 'postMessage');
};
window.postMessage = patchedPostMessage;
:
if (window.postMessage.length !== 1) {
window.postMessage = function(msg) {
setTimeout(function () {
console.log('window.postMessage not ready');
window.postMessage(msg);
}, 500);
}
}
}
* * HackAfter тысячи двадцать-одина () * * тысяча двадцать-дв
hackAfter() {
return Platform.OS === 'ios' ? '})();' : ''
}
OnMessage ()
onMessage(event) {
const { action, params } = JSON.parse(event.nativeEvent.data)
switch (action) {
case 'heightCaculated': {
return this.setState({
realContentHeight: params.height,
isRendering: false,
})
}
case 'addImages': {
this.props.resetImages()
// Prefetch image
params.imgs.map(img => Image.prefetch(img))
return this.props.addImages(params.imgs)
}
case 'openGallery':
return navigator.navigate('Gallery', {
index: params.index,
})
default:
return null
}
}
перевождь
export default connect(null, {
addImages,
resetImages,
})(WebViewAutoHeight)