【问题标题】:webview host application in androidandroid中的webview主机应用程序
【发布时间】:2018-10-17 07:39:52
【问题描述】:

我是初学者。当我开始使用 webview 制作应用程序时。

我在文档上看到https://developer.android.com/reference/android/webkit/WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,%20java.lang.String)

当 URL 即将加载到当前 WebView 中时,让主机应用程序有机会进行控制。

我的英语很弱,但我知道什么是托管。但我不明白什么是主机应用程序,为什么它会这样调用?

1) 宿主应用程序是指我的应用程序中的网络浏览器还是网络视图?

2) shouldoverrideurlloading 如何与 webview 和浏览器一起工作应该会有所帮助。

3) return true 会打开网页浏览器??

【问题讨论】:

    标签: android webview


    【解决方案1】:
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        final Uri uri = Uri.parse(url);
        return handleUri(view, uri);
    }
    
    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        final Uri uri = request.getUrl();
        return handleUri(view, uri);
    }
    

    和handleUri方法

    private boolean handleUri(WebView view, Uri uri) {
        final String scheme = uri.getScheme();
        final String host = uri.getHost();
        // Based on some condition you need to determine if you are going to load the url
        // in your web view itself or in a browser.
        // You can use `host` or `scheme` or any part of the `uri` to decide.
        if (scheme.startsWith("http:") || scheme.startsWith("https:")) {
            view.loadUrl(uri.getPath());
            return true;
        } else {
            return false;
        }
    }
    

    【讨论】:

    • 在文档中说调用 view.loadUrl() 并返回 true 不是正确的方法。
    • 没错。使用 webview 时,您可以完全控制一切。您必须模拟浏览器。就像您想认真地在网站上登录用户一样。您将在输入框中输入用户名和密码并提交。然后 url 在到达最终页面之前实际上会经过几个 URL。基本上加载 url 然后返回 true 就像说加载这个 url 然后停止加载这个 URL 并停止。 Err true 将覆盖传递给它的 url 加载该 url 然后开始加载 url。 False 只是加载传递给它的 url。
    【解决方案2】:

    使用 webview 时,您可以使用 shouldOverrideUrlLoading 来输入特定的 url(您希望用户看到的那个)。此方法还可以在从网页中抓取数据时使用一些更高级的编码,允许您收集 html 数据并可能以创造性的方式修改或利用 html 文档代码。然后在您准备好时向用户显示 web 视图。

    附言。请注意,根据您的最小值设置在哪个 api,您必须以不同的方式使用它。有一些关于谷歌搜索的教程,但大多数都已经过时了。这不是常见的做法。应用程序通常使用 url 提供的 api,然后显示数据或预期的视觉效果。

    【讨论】:

    • 兄弟..实际上这里的主机应用程序是什么意思?
    • 这里的宿主应用程序是指您的应用程序,您的编码包含 web 视图。我可能弄错了。但我相信这意味着你是想先在你的应用程序中使用预期的 url 做某事,还是只是在视图中显示 url。
    • 是的,我想在 webview 中显示网页,但是在 docs 中使用“host application”和“webview”这两个词让我很困惑。
    • true 导致当前 WebView 中止加载文档中的 URL。但在我的网络视图中没有任何反应?这是为什么呢?
    • 宿主应用程序是您的应用程序或活动,可以说 webview 就像 chrome 之类的网络浏览器。所以中止加载 url 意味着停止在你的 webview 中加载这个 url。用 url 数据做一些事情,然后它变得复杂,因为你从那里构建你的“浏览器”。 False 表示只需使用为 android 设备选择的默认浏览器来加载和显示 url。这差不多是我能想到的蹩脚条款了。
    猜你喜欢
    • 2023-03-31
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2013-04-28
    相关资源
    最近更新 更多