【问题标题】:Reference error: Can't find variable: IntersectionObserver参考错误:找不到变量:IntersectionObserver
【发布时间】:2019-11-27 16:22:41
【问题描述】:

我正在尝试在 ios 13 上运行的 cordova 8.0.0 应用程序中使用 IntersectionObserver。当我通过 safari 检查我的应用程序时,我看到初始化错误:

ReferenceError: Can't find variable: IntersectionObserver

这表明 IntersectionObserver 不可用,我应该使用 polyfill。但!我读过很多帖子声称 iOS safari 12+ 原生支持 IntersectionObserver。而且我有点假设,cordova 将运行 nativly 可用的 WKWebView,所以它应该在没有 polyfill 的情况下工作,对吧?

我发现我在我的 Safari 实验功能中启用了 IntersectionObserver,所以也许我可以使用一个选项/标志来强制在我的应用中启用此功能?如果可能的话,我真的很想避免使用 polyfill..

感谢任何建议

【问题讨论】:

    标签: ios13 intersection-observer cordova-8.0.0


    【解决方案1】:

    iOS Safari 从 12.2 开始支持 IntersectionObserver API。然而,它通过“实验功能”得到支持并默认启用。我假设默认情况下在cordova下没有启用实验功能,到目前为止我还没有找到一种方法来配置它以启用它。

    一个选项是使用 polyfill:https://www.npmjs.com/package/intersection-observer。我测试了自己,性能不够好,它使用setTimeoutMutationObserver 在启用所有选项的情况下观察整个文档。

    【讨论】:

      【解决方案2】:

      我们遇到了这个问题,需要指出一件重要的事情。虽然此问题已在较新的 Safari 浏览器中得到修复,但此问题仍可能出现在较旧的设备上(尽管 Safari 已完全更新)。这是因为 IntersectionObserver 功能似乎在旧 iPhone 上作为“实验功能”被停用(我知道 iPhone 8 就是这种情况)——可能是为了节省资源——请参阅https://youtu.be/qDSXYGybNVU?t=68。因此,为了确保您的应用程序正常工作,您可能仍需要使用 polyfill 作为替代/备用。

      【讨论】:

      • 谢谢,这帮助我们调试了这个问题。尽管它受到支持,但我们试图弄清楚它是如何被破坏的。
      【解决方案3】:

      我刚刚添加了这个检查

      if ('IntersectionObserver' in window) {
        // IntersectionObserver initialization code
      } else {
        // make lazy loading elements to be loaded right away
      }
      

      享受

      【讨论】:

        猜你喜欢
        • 2012-12-23
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多