2016-01-21 87 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)運行,或者使用與目標應用相同的密鑰進行簽名。