在Android中启用/禁用WebView的最佳做法

雷内·帕迪略(Rene Padillo)

想问一些关于在Android上启用和禁用Web视图的最佳实现方式的建议吗?

我有这个应用程序,它可以在其中(通过使用Web视图)打开URL,然后弹出并覆盖80%的UI,当用户导航到该应用程序的另一个页面时,它应该隐藏/关闭Web视图,但可以重新-在需要时再次打开。

这是代码片段

    private WebViewInterface webViewInterface = new WebViewInterface() {
    @Override
    public void onOpenURL(String url) {
        navBrowserWV.setVisibility(View.VISIBLE);
        navBrowserWV.getSettings().setJavaScriptEnabled(true);
        navBrowserWV.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
                handler.proceed();
            }
        });
        navBrowserWV.loadUrl(url);
    }
};

那这就是我关闭它的方式

private void closeWebView() {
    Log.d(LOGTAG, "closing webview...");

    // Destroy WebView if it exists
    if (this.navBrowserWV != null) {
        this.navBrowserWV.stopLoading();
        this.navBrowserWV.loadUrl("about:blank");
        this.navBrowserWV.clearHistory();
        this.navBrowserWV.clearCache(true);
        this.navBrowserWV.pauseTimers();
        this.navBrowserWV.setVisibility(View.GONE);
    }
}

这种实现方式的问题在于,它首先会正确显示页面,但是当我关闭它,然后再次使用url打开Web视图时,它不再只是白色背景加载页面(记录仪上没有错误)。

想寻求有关如何解决这一问题的帮助。谢谢

雷内·帕迪略(Rene Padillo)

最终,经过很长一段时间在互联网上寻找答案之后,我发现了这篇关于杀死Android webview [link]的旧文章

没有杀死WebView的真正方法(它将始终在您的进程中运行,并且您无法对ATM做任何事情)。因此,您只需要告诉WebView加载伪造的页面即可,对我来说,我做到了:this.navBrowserWV.loadUrl("about:blank");

现在就可以了!

网站报价

4.1 .getSettings().setJavaScriptEnabled() Inhalt

好吧,您会认为禁用WebView设置中的JavaScript会立即产生效果,简而言之:不会。仅在重新加载页面之后,就不再有JavaScript,并且从设计上来说,这也不是一件好事,因为页面或多或少都呈现得很好。

4.2 .stopLoading() Inhalt

由于XHR从另一台服务器“加载”某些东西,您可能会认为调用“ webview.stopLoading()”会产生效果。简而言之:事实并非如此。仅适用于HTML文件中包含的资源。可惜,不是吗...好吧,也许不是,因为没有“ startLoading()”方法可以在恢复活动后继续XHR。

4.3 .destroy() Inhalt

作为最后的选择,您可能会想到对那件事进行“ destroy()”操作,而且确实如此,此后无法访问WebView本身。但是,它的线程继续以僵尸的形式存在于广阔的RAM空间中,并继续发送XHR请求…

4.4 .pauseTimers() / resumeTimers() Inhalt

简而言之:不,不起作用。我什至不知道这些方法对控制JavaScript计时器是否有好处。没有纯HTML,AFAIK。

更新:仅涉及计时器时,这些功能似乎可以在2.3.5及更高版本上使用,但是,在调用该功能时没有活动的计时器,这些都是徒劳的。在我的用例中:当XHR处于活动状态(而不是运行计时器来计划下一个XHR调用)时暂停应用程序时,什么也没有发生,并且下一个计时器继续畅通无阻。

我希望这将对与我有同样问题的人有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android中onFling()的最佳做法?

来自分类Dev

在Android Spinner中实现键值对的最佳做法

来自分类Dev

Android中ID命名约定的最佳做法?

来自分类Dev

在Android中执行定时操作的最佳做法

来自分类Dev

在Android中显示gif的最佳做法

来自分类Dev

在WebView android中启用附件

来自分类Dev

在WebView android中启用缩放

来自分类Dev

在Android WebView中启用WebGL

来自分类Dev

在WebView android中启用附件

来自分类Dev

在Android中禁用WebView的功能?

来自分类Dev

Android权限-最佳做法

来自分类Dev

Android编码最佳做法

来自分类Dev

在WebView Android中启用缩放选项

来自分类Dev

设置在Android WebView中启用Cookie

来自分类Dev

Android-Gradle构建脚本中变量的最佳做法

来自分类Dev

在Android中执行网络操作的最佳做法是什么?

来自分类Dev

在Android应用程序中查询在线数据的最佳做法?

来自分类Dev

在Android中为ListView禁用/启用滚动

来自分类Dev

启用和禁用Android中的日期

来自分类Dev

在Unity中的Android上启用/禁用Wifi

来自分类Dev

Android操作栏的最佳做法

来自分类Dev

Android onClickListener实施最佳做法

来自分类Dev

更新Android应用的最佳做法?

来自分类Dev

Docker中证书的最佳做法

来自分类Dev

启用JavaScript的Android WebView

来自分类Dev

Android:启用/禁用按钮

来自分类Dev

Android:启用/禁用按钮

来自分类Dev

Android WebView禁用距离

来自分类Dev

如何在Android WebView中启用jQuery单击事件