【问题标题】:Cocoa .scrollToEndOfDocument stops working after 1st tryCocoa .scrollToEndOfDocument 在第一次尝试后停止工作
【发布时间】:2016-10-11 21:59:29
【问题描述】:

我正在编写一个带有加载网站的 WebView 的小型 MacOS 程序。这是当您滚动到底部时自动加载更多内容的网站之一。作为过期,我正在尝试编写将不断滚动到页面底部的代码,以便加载更多内容等等。

到目前为止,我所拥有的是:

scrollToBottomTotalTimes = 10
self.myWebView.mainFrame.load(NSURLRequest(url: NSURL(string: urlString)! as URL) as URLRequest!)

func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) {

        var scrollToBottomCurrentTimes = 0
        while scrollToBottomCurrentTimes != scrollToBottomTotalTimes {
            scrollToBottomCurrentTimes += 1
            self.myWebView.scrollToEndOfDocument(self)
            sleep(2) //give the page some time to load
        }
}

这一次效果很好:页面加载,滚动到底部,然后加载更多页面。

但是在那之后,WebView 不再滚动,尽管页面有足够的时间重新加载。页面上的位置与以前完全相同。

我感觉.scrollToEndOfDocument(self)似乎没有发现网页变长的事实。

有没有办法“更新”.scrollToEndOfDocument(self),让它知道页面的新底部在哪里?

谢谢!

【问题讨论】:

    标签: swift cocoa webkit


    【解决方案1】:

    在我看来,您使用了错误的方法。假设有新内容到达,您可能会收到多个对didFinishLoadFor 的请求。但是,您正在方法内部执行循环,并在方法内部进行睡眠,这会使您阻塞主队列并禁用事件机制。

    我建议你使用Grand Central Dispatch (GCD) 设置一个定时器事件,然后从定时器事件中触发滚动事件。请注意,您必须在主队列中进行滚动,并且计时器事件不在主队列中。只需查看GCD 上的文档即可。见https://developer.apple.com/reference/dispatch

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 2015-03-26
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多