1

我有一个 webview,其中加载了一个 url,其中有一些 url 可点击,但问题是当我单击 webview 中加载的页面上的链接时,它会在默认浏览器中打开,我想在单击时打开包含所有浏览器的对话框在设备中的链接上,要求选择浏览器,它应该在选择的浏览器中打开?

4

3 回答 3

1

覆盖默认点击行为

当用户单击 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 中的链接

于 2013-02-22T05:05:35.217 回答
0

但问题是当我单击 webview 中加载的页面上的链接时,它会在默认浏览器中打开

如果您选择了

默认使用此应用程序复选框

然后 android 停止向用户显示选项列表并继续在选定的默认浏览器中打开链接。

您可以拥有的唯一解决方案是通过进入设置来明确该偏好。然后android将使用List向您显示完整的操作。

在此处输入图像描述

如果您想采用复杂的方式,那么您可以使用 Javascript 注入并在单击链接时调用 Android 代码,这将以编程方式向用户显示浏览器列表。

您可以使用PackageManagerandqueryIntentActivityOptions()过滤掉您的活动,并获取用户可以选择的其他活动列表。

http://developer.android.com/guide/webapps/webview.html

于 2013-02-22T05:01:00.440 回答
0

@Neha 这取决于您的手机中有多少浏览器可用。例如,如果您只有默认浏览器,它只会重定向到该浏览器。如果您在下次运行您的应用程序时安装了 chrome 浏览器,它会询问您选择浏览器选项。

于 2013-02-22T05:01:14.980 回答