第一次尝试后,Cocoa .scrollToEndOfDocument停止工作

时间:2016-10-11 21:59:30

标签: swift cocoa webkit

我正在使用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)所以它知道页面的新底部在哪里?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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