【问题标题】:Creating a custom browser with whitelist android使用白名单android创建自定义浏览器
【发布时间】:2011-06-28 16:43:38
【问题描述】:

我正在尝试制作一个包含允许网站白名单的简单自定义浏览器。我的浏览器只是一个带有地址栏的 web 视图。将请求的网站与白名单进行比较时,如果该网站只是 www.yahoo.com,则可以正常工作。如果 www.yahoo.com 在白名单上,它将导航到该网站。我遇到的问题是当我访问 www.yahoo.com 时,它是他们的移动网站“m.yahoo.com”,并且不会导航到他们的任何链接,因为 URL.getHostName() 是 m.yahoo。 com 不等于白名单中的 www.yahoo.com。现在我只是使用 URL.getHostName() 与白名单进行比较。有没有更好的方法将请求的网站与白名单进行比较?

【问题讨论】:

    标签: android browser whitelist


    【解决方案1】:

    有几种方法可以解决这个问题。

    1) 您可以简单地将m.yahoo.com 链接添加到您的白名单中。这可能是最简单的解决方案。

    2) 根据是否合适,您可以更改浏览器的用户代理字符串以将其标识为桌面浏览器。简而言之,您在 WebView 上调用 getSettings() 并调用其 setUserAgentString() 方法,从流行的桌面 Web 浏览器传入用户代理字符串。

    3) 您可以编写一些 Java 代码来解析 URL.getHostName() 以将主机名剥离为仅顶级域名(例如 "m.yahoo.com" -> "yahoo.com"),然后与白名单进行比较。

    4) 您可以对主机名模式进行白名单匹配,而不是简单的字符串。使白名单中的每个条目成为匹配各种主机的正则表达式。然后,您只需将白名单中的每个条目与URL.getHostName() 匹配即可。如果您不熟悉正则表达式或 Java 中的正则表达式,there's plenty of tutorials available,可以在 Stack Overflow 上获得帮助。

    【讨论】:

    • 谢谢,这是一个很好的答案。我最喜欢第四个想法,我会研究一下。现在我只是暂时将 m.yahoo.com 添加到白名单中。我只是在寻找一种更有活力的方式。
    • 酷,很高兴它有帮助。如果您不熟悉正则表达式,那么努力学习它们是非常值得的。它们解决了很多字符串处理问题,不仅在 Java 中,在大多数其他编程语言中也是如此。
    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2016-11-15
    • 2013-04-08
    • 2017-04-06
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多