我有一个 webview,其中加载了一个 url,其中有一些 url 可点击,但问题是当我单击 webview 中加载的页面上的链接时,它会在默认浏览器中打开,我想在单击时打开包含所有浏览器的对话框在设备中的链接上,要求选择浏览器,它应该在选择的浏览器中打开?
3 回答
覆盖默认点击行为
当用户单击 WebView 中的链接时,默认行为是加载任何可以处理该链接的默认应用程序。因此,如果您单击 Web URL,浏览器将打开以处理它。如果您尝试在本地构建的网页之间导航,则需要覆盖此功能。幸运的是,这并不难处理。您可以通过将 WebView 的 WebViewClient 设置为 WebViewClient 的新实例来快速完成,如下所示:
创建时:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.webView1);
WebViewClient viewClient = new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);
view.loadUrl(url);
return true;
}
};
webView.setWebViewClient(viewClient);
webView.loadUrl("http://www.google.com");
}
检查以下链接以获取有关 WebViewClient 的更多信息
但问题是当我单击 webview 中加载的页面上的链接时,它会在默认浏览器中打开
如果您选择了
默认使用此应用程序复选框
然后 android 停止向用户显示选项列表并继续在选定的默认浏览器中打开链接。
您可以拥有的唯一解决方案是通过进入设置来明确该偏好。然后android将使用List向您显示完整的操作。
如果您想采用复杂的方式,那么您可以使用 Javascript 注入并在单击链接时调用 Android 代码,这将以编程方式向用户显示浏览器列表。
您可以使用PackageManager
andqueryIntentActivityOptions()
过滤掉您的活动,并获取用户可以选择的其他活动列表。
@Neha 这取决于您的手机中有多少浏览器可用。例如,如果您只有默认浏览器,它只会重定向到该浏览器。如果您在下次运行您的应用程序时安装了 chrome 浏览器,它会询问您选择浏览器选项。