Cordova 拦截 URL 加载 inappbrowser

Cordova intercept URL loading of inappbrowser

我想知道如何拦截 URL 从 Cordova InAppBrowser 的 WebView 内部加载。

目前,我可以在 MainActivity 中使用以下代码拦截 URL 从主 WebView 加载:

   final WebView myWebView = (WebView) this.appView.getView();
    myWebView.setWebViewClient(new SystemWebViewClient((SystemWebViewEngine) this.appView.getEngine()) {

      @Override
      public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        // Some custom logic
      }

但是当我在 InAppBrowser Webview 中加载一些 URL 时,此代码不会拦截该请求。有什么建议吗?

您可以使用 InAppBrowser 的 executeScript 功能在 IAB 加载页面后执行一些脚本,然后让该脚本执行您想要的任何逻辑,example from the docs:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');

ref.addEventListener('loadstop', 函数() { ref.executeScript({文件: "myscript.js"}); });

这是否适合您可能取决于您的自定义逻辑需要做什么,但这可能是一条值得研究的途径。您或许可以将事件侦听器添加到页面中的所有链接,并在单击它们时 运行 自定义逻辑。

您必须修改 inAppBrowser 代码

https://github.com/apache/cordova-plugin-inappbrowser/blob/master/src/android/InAppBrowser.java

在第 646 行设置了 webViewClient:

inAppWebView.setWebViewClient(client);

客户端有 InAppBrowserClient class,它在第 742 行定义。 您可以在那里添加 shouldInterceptRequest 逻辑或使用您自己的 WebViewClient subclass