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
我想知道如何拦截 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