为什么CordovaWebViewClient在Cordova 6中不再工作



我已经编写了自定义 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并困惑了自己。

在谷歌上搜索了很多之后,我找到了解决方案,这些解决方案大多是在2011-14年给出的,这些解决方案不适用。我找不到科尔多瓦文档有帮助。

它被替换为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);
    }
});

科尔多瓦 4 删除了CordovaWebViewClient:看这里

您可以使用WebViewClient而不是CordovaWebViewClient(cordova-plugin-inappbrowser 插件使用它来覆盖onPageStarted事件)。

public class CustomCordovaWebViewClient extends WebViewClient

Apache Cordova删除了CordovaWebViewClient,以支持像Crosswalk这样的外部Web视图。如果您查看以下提交链接中的14 changed files链接,您可能会看到CordovaWebViewClient被删除并添加了AndroidWebViewClient。

所以我想你不能在 Cordova 6.0 中使用相同的旧代码工作

您可以尝试改用org.apache.cordova.engine.SystemWebViewClient

事实上,同样的问题在这里得到了回答,它也被接受了。所以我相信这是解决问题的可能方法。希望对您有所帮助。

最新更新