单击 URL 将打开默认浏览器
-
24-09-2019 - |
题
我已经在我的中加载了一个外部URL WebView
. 。现在我需要的是,当用户单击加载的页面上的链接时,它必须像普通浏览器一样工作并在相同的位置打开链接 WebView
. 。但它打开默认浏览器并加载页面?
我已经启用了 JavaScript。但它仍然不起作用。我是不是忘记了什么?
解决方案
如果您使用的是 WebView
如果你不想要默认的 Android 行为,你必须自己拦截点击。
您可以监视事件 WebView
用一个 WebViewClient
. 。你想要的方法是 shouldOverrideUrlLoading()
. 。这允许您在选择特定 URL 时执行自己的操作。
您设置了 WebViewClient
你的 WebView
使用 setWebViewClient()
方法.
如果你看一下 WebView
SDK 中的示例 有一个例子可以满足您的需求。很简单:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
其他提示
在某些情况下,你可能会如果你不触发网址加载方法重定向需要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);
}
}
文档说,点击一个链接中的WebView会启动应用程序处理URL。你需要重写此默认行为
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
或如果没有条件逻辑的方法简单地做到这一点
myWebView.setWebViewClient(new WebViewClient());
将此2行代码中的 -
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
的方法boolean shouldOverrideUrlLoading(WebView view, String url)
被废弃在API 24.如果要支持新的设备应该使用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;
}
});
}
Arulx个Z回答正是我一直在寻找。
我正在写与抽屉式导航的应用程序与recyclerview和网页视图,用于保持网页浏览应用程序内点击超级链接的无论(因此不启动外部网络浏览器)。对于其将足以把下面的2行的代码:
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
正好在你的WebView声明。
下面是我的实施web视图码的示例:
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");
}}
这样,每次在网站上点击链接将加载的网页视图内。 (使用Android Studio中1.2.2所有SDK的更新)