首页 文章

如何在webview网址上打开新屏幕点击?

提问于
浏览
-1

在我的应用程序中,我使用webview来显示一些网络数据,我想实现一种功能,如果用户点击任何链接,将打开一个新的屏幕(活动),并且url的数据将显示在该活动的webview中 . 我已经尝试将webview客户端设置为webview并覆盖其onPageStarted,shouldOverrideUrlLoading方法,但它们都在同一屏幕中打开url .

这是我的代码

webview.loadData(html, "text/html; charset=utf-8", "UTF-8");
    webview.setWebViewClient(webViewClient);
}
WebViewClient webViewClient = new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        if (url.startsWith("http://")) {
            Intent intent = new Intent(FirstActivity.this, WebActivity.class);
            intent.putExtra("url", url);
            startActivity(intent);
        }
    }
    @Override
    public void onPageFinished(WebView view, String url) {
    }

    @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
         return false;
    }

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

        return false;
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        super.onLoadResource(view, url);
    }
};

如何实现?任何帮助将不胜感激

3 回答

  • 0

    试试这个:

    @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("http://")) {
            Intent intent = new Intent(FirstActivity.this, WebActivity.class);
            intent.putExtra("url", url);
            startActivity(intent);
            return true;
        }
        return false;
    }
    
    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    
        String url = request.getUrl().toString();
        if (url.startsWith("http://")) {
            Intent intent = new Intent(FirstActivity.this, WebActivity.class);
            intent.putExtra("url", url);
            startActivity(intent);
            return true;
        }
        return false;
    }
    
  • 0

    试试这个 . 但您首先需要设置一个像google.com这样的初创网站

    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    
    public class MainActivity extends Activity {
    
    private WebView view;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        view = (WebView) this.findViewById(R.id.webView);
        view.getSettings().setJavaScriptEnabled(true);
        view.getSettings().setDomStorageEnabled(true);
        view.setWebViewClient(new MyBrowser());
        view.loadUrl("[YOUR_WEBSITE]"); //try js alert
        view.setWebChromeClient(new WebChromeClient()); // adding js alert support
    
    }
    private class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:") || url.startsWith("mailto:") || url.startsWith("mms:") || url.startsWith("mmsto:") || url.startsWith("market:")) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
            else {
                view.loadUrl(url);
                return true;
            }
        }
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) {
            view.goBack(); //method goback()
            return true;
        }
    
        return super.onKeyDown(keyCode, event);
        }
    }
    
  • 0

    如果链接在网站外部,您可以执行以下操作:

    webview.setWebViewClient(new LinkExtWebViewClient());
    

    然后:

    public class LinkExtWebViewClient extends WebViewClient {
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
            if(Uri.parse(url).getHost().endsWith(" if your site is www.myurl.com, here you have to insert 'myurl.com' ")) {
                return false;
            }
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(intent);
            return true;
        }
    }
    

    让我知道它是否有效:)

相关问题