weixin_45377353 2020-03-30 19:19 采纳率: 0%
浏览 232

Android studio webview只能打开置顶网页 ,却打不打开其他网页,求大佬帮忙

Android studio webview只能打开置顶网页 ,却打不打开其他网页,求大佬帮忙
图片说明

public class WebViewActivity extends AppCompatActivity {
    private WebView mWvMain;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        mWvMain=findViewById(R.id.wv);
        //加载本地html文件
        //mWvMain.loadUrl("file:///android_asset/tian.html");
        //加载网络URL
        mWvMain.getSettings().setJavaScriptEnabled(true);
        mWvMain.setWebViewClient(new MyWebViewClinet());
        mWvMain.getSettings().setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
        mWvMain.getSettings().setAppCacheEnabled(true);//是否使用缓存
        mWvMain.setWebChromeClient(new MyWebChromeClinet());
       mWvMain.loadUrl("https://m.baidu.com");
    }
   class MyWebViewClinet extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.d("WebView","onPageStarted.....");
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            Log.d("WebView","onPageFinished.....");
            //mWvMain.loadUrl("javascript:alert('hello')");
            mWvMain.evaluateJavascript("javascript:alert('hello')",null);
        }
    }

    class  MyWebChromeClinet extends WebChromeClient{
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
        }

        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            setTitle(title);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && mWvMain.canGoBack()){
          mWvMain.goBack();
          return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-07-25 16:38
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题可能出在shouldOverrideUrlLoading方法中,该方法会在每次url加载请求时被调用,如果return true,则表示该url请求已经被WebView处理,不再需要再次加载。在代码中,应该根据不同的url来判断是否需要加载,而不是简单地使用view.loadUrl(request.getUrl().toString())。 可能的解决方法是修改shouldOverrideUrlLoading方法,根据url的情况进行判断,如果是需要打开的网页,则返回false,让WebView自己处理;如果是其他情况,则返回true,不加载该url。 示例代码:
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        if (url.startsWith("https://m.baidu.com")) {
            return false; // 如果是需要打开的网页,返回false
        } else {
            return true; // 如果是其他网址,返回true
        }
    }
    

    通过这样的修改,可以让WebView能够正常打开置顶网页,而不打开其他网页。

    评论

报告相同问题?