应该如何调用 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 进行调用。

您可以返回truefalse 告诉WebView 是否应该加载url,或者是否应该停止它。

一个常见的用例是防止用户在应用内浏览器中导航离开特定网页。

希望这会有所帮助!

【讨论】:

以上是关于应该如何调用 Override Url的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中实现抽象方法时是不是应该添加 @Override 注释?

如何在线程对象中调用多态方法?

android在Service的onStartCommand()中调用stopself()应该注意的问题

java中override是啥意思

Overload和Override的区别

override的实现原理