我已经编写了自定义webviewclient类来覆盖cordova 3.7中的onPageStarted, onPageFinished etc
,它正常工作。
在下面的代码中,我已经将www目录托管到Web服务器并从那里交换了cordova插件(条形码扫描器,nfc,蓝牙等)。
public class MainActivity extends CordovaActivity {
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();
loadUrl("https://example.com");
}
public class CustomCordovaWebViewClient extends CordovaWebViewClient {
public CustomCordovaWebViewClient(CordovaInterface cordova, CordovaWebView view) {
super(cordova, view);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("CSP Log", "onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i("CSP Log", "onPageFinished: " + url);
}
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload){
super.doUpdateVisitedHistory(view, url, isReload);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
}
}
一年后,我将项目从cordova 3.7迁移到cordova 6,但我发现上面的代码像CordovaWebViewClient, super.onPageStarted etc
一样无法解析符号。我也尝试过CordovaWebViewImpl
而且让自己感到困惑。
在google上搜索了很多我发现的解决方案,这些解决方案主要在2011-14号给出,不适用。我找不到cordova文档有用。
答案 0 :(得分:6)
它被SystemWebViewClient
你应该这样做:
SystemWebView wv = (SystemWebView)appView.getView();
wv.setWebViewClient(new SystemWebViewClient((SystemWebViewEngine)appView.getEngine()){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("CSP Log", "onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i("CSP Log", "onPageFinished: " + url);
}
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload){
super.doUpdateVisitedHistory(view, url, isReload);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
答案 1 :(得分:1)
Cordova 4 删除了CordovaWebViewClient
:look here
您可以使用WebViewClient
代替CordovaWebViewClient
(cordova-plugin-inappbrowser插件用于覆盖onPageStarted
事件。)
public class CustomCordovaWebViewClient extends WebViewClient
答案 2 :(得分:1)
Apache cordova删除了CordovaWebViewClient,以支持像Crosswalk这样的外部网页浏览。如果您查看以下commit link中的14 changed files
链接,则可以看到删除CordovaWebViewClient并添加AndroidWebViewClient。
所以我猜你不能在Cordova 6.0中使用相同的旧代码工作
您可以尝试使用org.apache.cordova.engine.SystemWebViewClient
代替。
事实上,同样的问题已经回答here,并且也被接受了。所以我相信这是该问题的可能解决方案。希望它有所帮助。