我正在尝试制作一个包含允许网站白名单的简单自定义浏览器。我的浏览器只是一个带有地址栏的webview。将所请求的网站与白名单进行比较时,如果该网站只是www.yahoo.com,则可以正常工作。如果www.yahoo.com在白名单上,它将导航到该网站。我遇到的问题是当我到达www.yahoo.com时,它是他们的移动网站“m.yahoo.com”并且不会导航到他们的任何链接,因为URL.getHostName()是m.yahoo。 com不等于白名单上的www.yahoo.com。现在我只是使用URL.getHostName()来比较白名单。有没有更好的方法将所请求的网站与白名单进行比较?
答案 0 :(得分:0)
有几种方法可以解决这个问题。
1)您只需将m.yahoo.com
链接添加到白名单即可。这可能是最简单的解决方案。
2)根据是否合适,您可以更改浏览器的用户代理字符串,以将自己标识为桌面浏览器。简而言之,您在WebView上调用getSettings()
并调用其setUserAgentString()
方法,从流行的桌面Web浏览器传入用户代理字符串。
3)您可以编写一些Java代码来解析URL.getHostName()
以将主机名剥离到只有顶级域名,(例如“m.yahoo.com
” - >“{{1 “),然后与白名单进行比较。
4)您可以在主机名模式上进行白名单匹配,而不是简单的字符串。使白名单中的每个条目成为与各种主机匹配的正则表达式。然后,您只需将白名单中的每个条目与yahoo.com
匹配即可。如果您是Java中的正则表达式或正则表达式的新手,there's plenty of tutorials available,可以在Stack Overflow上找到帮助。