2016-10-11 6 views
2

私はウェブサイトをロードするWebViewを備えた小さなMacOSプログラムを作成しています。これは、下にスクロールしたときにコンテンツを自動読み込みするサイトの1つです。期限切れとして、私は常にページの一番下までスクロールするコードを書こうとしているので、それ以上のものがロードされるようになっています。これは、かつてうまく機能Cocoa .scrollToEndOfDocumentは1回目の試行後に動作を停止します

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)を更新する方法はありますか?それで、ページの新しい場所がどこにあるのかわかりますか?

ありがとうございます!

答えて

0

あなたは間違ったアプローチを使用しているようです。新しいコンテンツが到着したとすると、didFinishLoadForに複数のリクエストが届く可能性があります。しかし、あなたはメインのキューをブロックし、イベントメカニズムを無効にする方法の中でスリープ状態でメソッド内部でループを行っています。

Grand Central DispatchGCD)を使用してタイマーイベントをセットアップしてから、タイマーイベントからスクロールイベントを起動することをお勧めします。メインキューでスクロールする必要があり、タイマーイベントがメインキューにないことに注意してください。 GCDのドキュメントをチェックしてください。 https://developer.apple.com/reference/dispatchを参照してください。

関連する問題