2016-01-21 116 views
1

我在Android中构建了一个第三方库,用于处理WebView并分析其性能。在WebView中监听HTML内容更改

从迄今为止所完成的工作中,我发现有些广告服务器会打开Banner广告WebViews,并每X秒自动刷新一次广告。

在自动刷新过程中,我发现他们用新广告替换HTML内容,而不是创建新的WebView实例。

我需要赶上这些重新加载而不会干扰JS注入。

我希望有某种setOnDomChangedEventListener方法,但我找不到一个。

我可以用什么技术来捕捉这些事件?

回答

0

首先,重新加载和DOM更改是不同的事情。页面可以在不加载任何内容的情况下更改DOM重新加载页面从头开始重新初始化DOM和JS上下文,因此它不同于DOM树的动态更新。

如果您想要收听网络负载,则需要在WebView中使用WebViewClient.shouldInterceptRequest回调。

通过WebView Java API无法监听DOM更改。一种方法是将代码注入页面并使用MutationObserver(doc)。请注意,如果页面重新加载,您需要重新注入代码。

一个较少侵入但更多涉及的方法是使用远程Web调试。调试协议WebView使用支持DOM breakpoints。实际上,如果你正在构建一个性能分析框架,这可能是一个好方法,因为它可以让你测量和监控很多事情。但请注意,出于安全考虑,为了使Android应用连接到远程调试套接字,它需要以shell用户身份(如adb)运行,或者使用与目标应用相同的密钥进行签名。