我正在使用Xcode开发iOS应用。该应用程序每X秒钟刷新一次UIWebView。
通过后台方式,该应用程序称为“浏览器自动刷新”:https://itunes.apple.com/us/app/browser-auto-refresh/id1177883066?mt=8)。
当页面刷新后UIWebView的内容发生更改(即,该页面的所有者刚刚更新了当前正在刷新的页面)时,我正在尝试实施警报。我设法掌握了响应标头,但看不到来自多个站点(包括Google.com)的任何eTag信息。
有人知道如何在刷新UIWebView页面时告诉您网页的内容已更改吗?
答案 0 :(得分:2)
正如Peter Pajchl所述,UIWebView放在其板上的内容通常不受您的控制。这意味着-除非您仅严格地控制固定的一组服务,否则您将无法依靠HTTP标头来查找任何有用的元信息。
正如他还建议的那样,您可以计算页面内容的校验和(无论如何,强大的Etag很有可能这样做)并将其与新获取的版本进行比较。缺点是该方法本质上是 strong ,如果您仅对语义更新感兴趣,则会得到误报。为了使您的应用程序对特定站点毫无用处,所有者可以将时间戳记注入内容中的某个地方,因为每次更新都会产生不同的校验和。
因此,在计算校验和之前,您可以尝试以仅考虑有意义数据的方式对数据进行规范化。这很可能需要您正在观看的网站的先验知识才能有效。
另一种方法是计算某种相似性度量标准(有或没有标准化),并对“已更新”警报设置阈值。这可能在计算上要求很高,更糟糕的是,它可能需要更多的先验信息(至少是诸如阈值之类的元参数)。
答案 1 :(得分:0)
我认为Sami Hult关于尝试寻找有意义的数据以计算校验和的观点很不错。 我可能建议尝试以Safari阅读器的形式查找内容,它不能在所有可能的互联网页面上运行,但可能适用于博客和新闻网站。 供参考看看 https://medium.com/@mandy.michael/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9 一些新闻站点可能会定期更新自身以显示新内容,因此仅通过实现委托方法shouldstartloadwithrequest就可以得到通知。 我会避免在任意页面上使用http标头。