我在 WebView 中加载了一个外部URL . 现在我需要的是当用户点击加载页面上的链接时,它必须像普通浏览器一样工作并打开相同的链接 WebView . 但它打开默认浏览器并在那里加载页面?
WebView
我启用了JavaScript . 但它仍然无法正常工作 . 我忘记了什么吗?
在你的代码中添加这2行 -
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
如果您使用的是 WebView ,则需要默认的Android行为 .
您可以使用WebViewClient监视 WebView 中的事件 . 你想要的方法是shouldOverrideUrlLoading() . 这允许您在选择特定URL时执行自己的操作 .
使用setWebViewClient() method设置 WebView 的 WebViewClient .
WebViewClient
如果你看WebView sample in the SDK那里's an example which does just what you want. It'就像这样简单:
private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }
在某些情况下,如果获得不会触发url加载方法的重定向,则可能需要覆盖onLoadResource . 在这种情况下,我尝试了以下内容:
@Override public void onLoadResource(WebView view, String url) { if (url.equals("http://redirectexample.com")) { //do your own thing here } else { super.onLoadResource(view, url); } }
官方documentation说,单击WebView中的链接将启动处理URL的应用程序 . 您需要覆盖此默认行为
myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } });
或者如果方法中没有条件逻辑,只需执行此操作即可
myWebView.setWebViewClient(new WebViewClient());
Arulx Z的答案正是我所寻找的 .
我正在使用带有recyclerview和webviews的Navigation Drawer编写一个应用程序,用于在应用程序内部保持Web浏览,而不管单击的超链接(因此不启动外部Web浏览器) . 为此,只需输入以下两行代码即可:
完全在您的WebView语句下 .
这是我实现的WebView代码的示例:
public class WebView1 extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = (WebView) findViewById(R.id.wv1); //webview statement wv.setWebViewClient(new WebViewClient()); //the lines of code added wv.setWebChromeClient(new WebChromeClient()); //same as above wv.loadUrl("http://www.google.com"); }}
这样,点击网站中的每个链接都会加载到WebView中 . (使用Android Studio 1.2.2并更新所有SDK)
方法 boolean shouldOverrideUrlLoading(WebView view, String url) 在API 24中已弃用 . 如果您支持新设备,则应使用 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) .
boolean shouldOverrideUrlLoading(WebView view, String url)
boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
您可以通过执行以下操作来使用它们:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { newsItem.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); } else { newsItem.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); }
6 回答
在你的代码中添加这2行 -
如果您使用的是
WebView
,则需要默认的Android行为 .您可以使用WebViewClient监视
WebView
中的事件 . 你想要的方法是shouldOverrideUrlLoading() . 这允许您在选择特定URL时执行自己的操作 .使用setWebViewClient() method设置
WebView
的WebViewClient
.如果你看WebView sample in the SDK那里's an example which does just what you want. It'就像这样简单:
在某些情况下,如果获得不会触发url加载方法的重定向,则可能需要覆盖onLoadResource . 在这种情况下,我尝试了以下内容:
官方documentation说,单击WebView中的链接将启动处理URL的应用程序 . 您需要覆盖此默认行为
或者如果方法中没有条件逻辑,只需执行此操作即可
Arulx Z的答案正是我所寻找的 .
我正在使用带有recyclerview和webviews的Navigation Drawer编写一个应用程序,用于在应用程序内部保持Web浏览,而不管单击的超链接(因此不启动外部Web浏览器) . 为此,只需输入以下两行代码即可:
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
完全在您的WebView语句下 .
这是我实现的WebView代码的示例:
这样,点击网站中的每个链接都会加载到WebView中 . (使用Android Studio 1.2.2并更新所有SDK)
方法
boolean shouldOverrideUrlLoading(WebView view, String url)
在API 24中已弃用 . 如果您支持新设备,则应使用boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.您可以通过执行以下操作来使用它们: