我正在为Android编写一个SDK,它需要通过枚举UI将JavaScript代码注入到它找到的Web视图中。
找到 Web 视图后,代码使用setWebViewClient() 设置WebViewClient,并等待onPageDone()执行实际注入。
一切正常,直到我尝试在Cordova 8应用程序上使用此方法。
Cordova 8 使用的 WebView 是一个子类 (org.apache.cordova.engine.SystemWebView),它通过以下方式覆盖setWebViewClient()方法:
public void setWebViewClient(WebViewClient client) {
this.viewClient = (SystemWebViewClient)client;
super.setWebViewClient(client);
}
由于强制转换到SystemWebViewClient,我得到了一个转换异常。
我希望我的解决方案尽可能通用,因此扩展SystemWebViewClient不是一种选择,但我仍然需要知道何时加载Web视图页面以注入JavaScript。
有没有办法在不使用WebViewClient和webView.setWebViewClient()的情况下完成页面加载时获得通知?
一个可能的解决方法是改用WebChromeClient,并覆盖其onProgressChanged方法,如下所示:
WebView webView = new WebView(this);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
// Do your injection here
}
}
});