如何在webview url点击打开新的屏幕?
问题描述:
在我的应用程序,我使用的WebView显示一些网站的数据,我想实现当用户点击任何链接一个新的屏幕(活动)上,其中一个功能将打开和URL的数据将显示在该活动的网页流量。我已经尝试了的WebView客户端设置为网页视图,并覆盖其onPageStarted,shouldOverrideUrlLoading方法,但他们都打开同一个屏幕内的URL。如何在webview 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);
}
};
这可怎么实现的?任何帮助将不胜感激
答
试试这个:
@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;
}
答
试试这个。但是,你首先需要设置一个起始网站如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);
}
}
答
如果链接是外部网站,你可以做这样的事情:
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;
}
}
让我知道,如果它的工作原理:)
*我的代码*的某些部分是不完整的,并且*任何建议*不是一个具体的问题。参见[如何创建一个最小的,完整的和可验证的示例](http://stackoverflow.com/help/mcve)和[问]。 –