如何判断 UIWebView 内容何时更改?
How to tell when UIWebView content changes?
我正在使用 Xcode 开发 iOS 应用程序。该应用程序每 X 秒刷新一次 UIWebView。
作为背景,该应用名为 'Browser Auto Refresh':https://itunes.apple.com/us/app/browser-auto-refresh/id1177883066?mt=8)。
我正在尝试在 UIWebView 的内容更改时实现警报 post 页面刷新(即当前正在刷新的页面刚刚被该页面的所有者更新)。我已设法获得响应 headers,但无法从多个站点(包括 Google.com)看到任何 eTag 信息。
有谁知道如何在刷新 UIWebView 页面时判断网页内容发生变化?
正如 Peter Pajchl 所说,您的 UIWebView 获得的内容通常不受您的控制。这意味着 - 除非你只依赖一组严格控制的固定服务 - 你不能依赖 HTTP headers 来找到任何有用的 meta-information.
正如他还建议的那样,您可以计算页面内容的校验和(这是强 Etag 最有可能做的事情)并将其与新获取的版本进行比较。缺点是该方法本身 strong,如果您只对语义更新感兴趣,您将得到误报。要使您的应用程序对特定站点无用,所有者可以在内容的某处插入时间戳,因为每次更新都会产生不同的校验和。
因此,您可以尝试 规范化 数据,然后再以仅考虑有意义数据的方式计算校验和。这很可能需要先验了解您正在观看的网站才能有效。
另一种方法是计算某种相似性度量(有或没有归一化)并在 "updated" 警报上设置阈值。这在计算上可能要求很高,更糟糕的是,它可能需要更多 先验 信息(至少像阈值这样的元参数)。
我认为 Sami Hult 在尝试找到有意义的数据来计算校验和方面提出了一个很好的观点。
我可能建议尝试以 Safari reader 的形式查找内容,它不适用于所有可能的互联网页面,但可能适用于博客和新闻网站。
供参考看看这个
https://medium.com/@mandy.michael/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9
一些新闻站点可能会定期更新自己以显示新内容,因此您只需实施委托方法 shouldstartloadwithrequest 就可以得到通知。
我会避免对任意页面使用 http headers。
我正在使用 Xcode 开发 iOS 应用程序。该应用程序每 X 秒刷新一次 UIWebView。
作为背景,该应用名为 'Browser Auto Refresh':https://itunes.apple.com/us/app/browser-auto-refresh/id1177883066?mt=8)。
我正在尝试在 UIWebView 的内容更改时实现警报 post 页面刷新(即当前正在刷新的页面刚刚被该页面的所有者更新)。我已设法获得响应 headers,但无法从多个站点(包括 Google.com)看到任何 eTag 信息。
有谁知道如何在刷新 UIWebView 页面时判断网页内容发生变化?
正如 Peter Pajchl 所说,您的 UIWebView 获得的内容通常不受您的控制。这意味着 - 除非你只依赖一组严格控制的固定服务 - 你不能依赖 HTTP headers 来找到任何有用的 meta-information.
正如他还建议的那样,您可以计算页面内容的校验和(这是强 Etag 最有可能做的事情)并将其与新获取的版本进行比较。缺点是该方法本身 strong,如果您只对语义更新感兴趣,您将得到误报。要使您的应用程序对特定站点无用,所有者可以在内容的某处插入时间戳,因为每次更新都会产生不同的校验和。
因此,您可以尝试 规范化 数据,然后再以仅考虑有意义数据的方式计算校验和。这很可能需要先验了解您正在观看的网站才能有效。
另一种方法是计算某种相似性度量(有或没有归一化)并在 "updated" 警报上设置阈值。这在计算上可能要求很高,更糟糕的是,它可能需要更多 先验 信息(至少像阈值这样的元参数)。
我认为 Sami Hult 在尝试找到有意义的数据来计算校验和方面提出了一个很好的观点。 我可能建议尝试以 Safari reader 的形式查找内容,它不适用于所有可能的互联网页面,但可能适用于博客和新闻网站。 供参考看看这个 https://medium.com/@mandy.michael/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9 一些新闻站点可能会定期更新自己以显示新内容,因此您只需实施委托方法 shouldstartloadwithrequest 就可以得到通知。 我会避免对任意页面使用 http headers。