应该如何调用 Override Url
Posted
技术标签:
【中文标题】应该如何调用 Override Url【英文标题】:How is shouldOverrideUrl called 【发布时间】:2020-02-04 08:41:07 【问题描述】:我对 android 开发完全陌生。 最近我被要求调查一些关于我们的应用程序的 webview 加载的事情,它是由 Flutter 编写的,并使用了 flutter_webview_plugin。
flutter_webview_plugin 升级后,发现有一些变化。
还有flutter_webview_plugin里面的代码
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
super.onPageStarted(view, url, favicon);
Map<String, Object> data = new HashMap<>();
data.put("url", url);
data.put("type", "startLoad");
FlutterWebviewPlugin.channel.invokeMethod("onState", data);
@Override
public void onPageFinished(WebView view, String url)
super.onPageFinished(view, url);
Map<String, Object> data = new HashMap<>();
data.put("url", url);
FlutterWebviewPlugin.channel.invokeMethod("onUrlChanged", data);
data.put("type", "finishLoad");
FlutterWebviewPlugin.channel.invokeMethod("onState", data);
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
// returning true causes the current WebView to abort loading the URL,
// while returning false causes the WebView to continue loading the URL as usual.
String url = request.getUrl().toString();
boolean isInvalid = checkInvalidUrl(url);
Map<String, Object> data = new HashMap<>();
data.put("url", url);
data.put("type", isInvalid ? "abortLoad" : "shouldStart");
FlutterWebviewPlugin.channel.invokeMethod("onState", data);
return isInvalid;
我尝试使用shouldOverrideUrlLoading, onPageStarted,onPageFinished
到处搜索,但找不到调用它们的位置。
我认为它们应该被这样使用:
BrowserClient webViewClient;
webviewClient.shouldOverrideUrlLoading()
或
webViewClient.invokeMethod('shouldOverrideUrlLoading',arg)
类似上面的东西。但我什么都找不到。
【问题讨论】:
webview自己调用这些方法,通过实现并返回true/false值,可以决定是否允许webview加载特定的url 一个常见的用例是防止用户离开您的网站 哦,明白了,谢谢@SteelToe 【参考方案1】:当页面应该被加载时,WebView 会自己调用这些方法。
假设 WebView 正在尝试加载 www.google.com,shouldOverrideUrlLoading
方法将使用传递给 request
参数的网址 www.google.com 进行调用。
您可以返回true
或false
告诉WebView 是否应该加载url,或者是否应该停止它。
一个常见的用例是防止用户在应用内浏览器中导航离开特定网页。
希望这会有所帮助!
【讨论】:
以上是关于应该如何调用 Override Url的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中实现抽象方法时是不是应该添加 @Override 注释?