有没有办法让 WebView 在 Android 中自动链接 URL 和电话号码?

Posted

技术标签:

【中文标题】有没有办法让 WebView 在 Android 中自动链接 URL 和电话号码?【英文标题】:Is there any way to have WebView auto-link URLs and phone numbers in Android? 【发布时间】:2010-12-17 04:14:32 【问题描述】:

如果页面上的 URL 或电话号码不是链接,是否有任何方法可以让 WebView 识别它并自动将其转换为链接,就像使用 TextViews 一样?

使用TextView,您只需将android:autoLink 设置为所需的设置:

<TextView
    android:autoLink="web|phone"
    ... />

但我找不到 WebView 的任何等效项。

【问题讨论】:

【参考方案1】:

如果您从字符串加载自己的(网络)内容,那么您可以执行以下操作:

final String content = "My email is: firstname@email.com ...";
Spannable sp = new SpannableString(content);
Linkify.addLinks(sp, Linkify.ALL);
final String html = "<body>" + Html.toHtml(sp) + "</body>";
myWebView.loadData(html, "text/html", "utf-8");

【讨论】:

请注意,如果内容字符串已经包含 HTML,您将需要使用 Spannable sp = new SpannableString( Html.fromHtml(content) ),这样您的字符就不会在 Html.toHtml(sp) 中实体化。 它适用于棒棒糖版本吗?我在 Lollipop 和 Kitkat 上运行我的应用程序,但在 Lollipop 设备上遇到问题? 这可行,但格式有问题。如果内容包含 webview 不支持的标签(例如 )。【参考方案2】:

我不知道有什么方法可以通过更改设置来完成这项工作,但一种解决方法是等到网页完成加载然后再做:

yourWebView.loadUrl("javascript:(function() /* code that creates links */ )()");

这会将 javaScript 注入到已经加载的网页中。 这里有一个稍长的示例:http://lexandera.com/2009/01/injecting-javascript-into-a-webview/。

如果您查看 Greasemonkey 的 Linkify 脚本的源代码,您可以找到用于创建链接的 JavaScript 源代码(如果您不熟悉它,它是 Firefox 的插件)。我相信它带有默认安装。

【讨论】:

哈...这正是我计划的路线(包括使用 Linkify 作为示例),如果没有内置的方法来执行此操作。谢谢! 浏览器没有自动检测电话号码和地址吗?必须有一个更简单的方法。我只是不知道。 它确实有某种地址(和可能的电话号码)检测,是的。但根据我的经验,它不是很可靠(上次我测试它只识别美国地址),它也没有突出它检测到的内容。 Linkifygreasemonkey 脚本最终没有工作,因为(显然)WebView 没有 XPath。我最终挖掘了一个使用 DOM 的书签,并且(修改后)它运行良好。

以上是关于有没有办法让 WebView 在 Android 中自动链接 URL 和电话号码?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让 webview 显示 flash 内容?

Android WebView:有没有办法获取 javascript 堆栈跟踪?

有没有办法知道一个h5页面是不是在android平台上加载了webview?

有没有办法在android上有一个webview,我可以在页面加载之前注入css?

Xamarin.Forms - 如果 webView 包含在 Android 上打开的模式或菜单,有没有办法禁用拉刷新?

Android Webview:屏幕太大的图像