React Native Webview 组件没有自带的方式可以监听网页内部资源的加载( jpg, png, js, css, mp3 等),曲线实现方式:用 js 注入定时器到网页,网页里获取节点的 src 属性并 postMessage 给 native ,以 img 节点为例:
import { WebView } from 'react-native-webview'
let srcs:string[] = []
export default function WebviewScreen() {
return (
<WebView
source={{ uri: 'https://www.bing.com/images' }}
useWebKit={true}
allowsBackForwardNavigationGestures
allowsInlineMediaPlayback
injectedJavaScriptBeforeContentLoaded = {`
setInterval(()=>{
const nodes = document.querySelectorAll('img')
for (const node of nodes) {
window.ReactNativeWebView.postMessage(node.src)
}
}, 2000)
`}
onMessage = {msg=>{
const src = msg.nativeEvent?.data?.trim()
if (src && -1===srcs.indexOf(src)) {
console.log('onMessage', new Date(), src)
srcs.push(src)
}
}}
/>
);
}
也可以用于 video 等其它带有 src 的节点
缺点:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.