【问题标题】:Webview showing blank screen when clicking a link within the webview单击 Web 视图中的链接时 Web 视图显示空白屏幕
【发布时间】:2017-12-08 11:24:02
【问题描述】:

在 Android 7.1.1 上,我的应用程序上有一个页面,该页面创建一个 web 视图并允许在我的网站周围进行一些导航。第一个页面加载正常,但是当我单击 webview 中的链接时,它会显示一个白色的空白页面。这一切都适用于以前版本的 android。

我了解谷歌对 webview 所做的更改,并且 chrome 已更新,并且我已经通过各种重置和安装新的 webview 系统应用程序,所以我不确定问题是否相关。我认为它不会加载第一页。

这是我的 webview 代码

 public class WebViewActivity extends Activity
{
Service details;
String URL;
WebView webView;
private DataManager mDataManager;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);
    Intent intent = this.getIntent();
    Bundle bundle = intent.getExtras();

    URL = (String)bundle.getString("url");
    webView = (WebView) findViewById(R.id.wv);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.setWebViewClient(new GeoWebViewClient());
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setGeolocationEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.setWebChromeClient(new GeoWebChromeClient());
    webView.clearCache(true);
    webView.loadUrl(URL);


    //webView.setWebViewClient(new Client());
    //webView.setWebChromeClient(new ChromeClient());
    if (Build.VERSION.SDK_INT >= 19) {
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    }
    else if(Build.VERSION.SDK_INT >=11 && Build.VERSION.SDK_INT < 19) {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }

}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (webView.canGoBack()) {
                    webView.goBack();
                } else {
                    finish();
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}



    /**
     * WebChromeClient subclass handles UI-related calls
     * Note: think chrome as in decoration, not the Chrome browser
     */
    public class GeoWebChromeClient extends WebChromeClient
    {
        @Override
        public void onGeolocationPermissionsShowPrompt(String origin,
                                                       GeolocationPermissions.Callback callback)
        {
            // Always grant permission since the app itself requires location
            // permission and the user has therefore already granted it
            callback.invoke(origin, true, false);
        }
    }

    public class GeoWebViewClient extends WebViewClient
    {


        @Override
        public void onPageFinished(WebView view, String url)
        {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

        }
        /*@deprecated
        public boolean shouldoverrideurlloading(webview view, string url) {
            return false;
        }*/

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
        {
            view.loadUrl(request.toString());
            return true;
        }
    }

}

我觉得可能和shouldOverrideUrlLoading有关

【问题讨论】:

    标签: android webview


    【解决方案1】:

    您需要将WebClient 设置为webView。如果您想在webview 中打开链接。 那就这样吧。

    webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return false;
    }
    });
    

    对于 Android N 以上使用 Overridden 方法:

     @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    
        return false;
    }
    

    【讨论】:

    • 我会检查上面的代码,唯一的区别是你在返回时设置为 false
    • 我不想在浏览器中打开它??这在 7.1.1 之前有效,我可以通过一个 webview 在我的网站上导航,但现在使用 7.1.1,我的 webview 中只有第一页可以工作,而导航却没有
    • 您的最后一次更新有效,但我需要检查这不会在以前的版本中破坏它
    • 看起来不错,谢谢,你能删除前两个建议吗,因为我已经这样做了,浏览器建议是不相关的,一旦完成就会接受欢呼
    • 刚刚删除了一个浏览器。其他两个几乎与 Api 级别的依赖相同。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多