Kakao .scrollToEndOfDocument berhenti berfungsi setelah percobaan pertama

Saya sedang menulis program MacOS kecil dengan WebView yang memuat situs web. Ini adalah salah satu situs yang memuat lebih banyak konten secara otomatis saat Anda menggulir ke bawah. Sebagai masa berlakunya, saya mencoba menulis kode yang akan terus-menerus bergulir ke bagian bawah halaman sehingga lebih banyak yang dimuat dan seterusnya.

Apa yang saya miliki sejauh ini adalah ini:

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
        }
}

Ini berfungsi dengan baik sekali: Halaman dimuat, digulir ke bawah, dan lebih banyak halaman dimuat.

Namun setelah itu, WebView tidak dapat di-scroll lagi, meskipun ada cukup waktu untuk memuat ulang halaman. Posisi di halaman tetap sama seperti sebelumnya.

Saya merasa .scrollToEndOfDocument(self) sepertinya tidak mendeteksi fakta bahwa halaman web menjadi lebih panjang.

Apakah ada cara untuk 'memperbarui' .scrollToEndOfDocument(self) sehingga ia mengetahui di mana letak bagian bawah halaman yang baru?

Terima kasih!


person Giulio Crisanti    schedule 11.10.2016    source sumber


Jawaban (1)


Menurut saya, Anda menggunakan pendekatan yang salah. Dengan asumsi konten baru tiba, Anda mungkin mendapatkan beberapa permintaan ke didFinishLoadFor. Namun Anda melakukan perulangan di dalam metode dengan metode tidur di dalam yang membuat Anda memblokir antrian utama dan menonaktifkan mekanisme acara.

Saya sarankan Anda mengatur acara pengatur waktu menggunakan Grand Central Dispatch (GCD) dan kemudian menjalankan acara gulir dari acara pengatur waktu. Perlu diketahui bahwa Anda harus melakukan scrolling di antrian utama dan event pengatur waktu tidak ada di antrian utama. Lihat saja dokumentasinya di GCD. Lihat https://developer.apple.com/reference/dispatch.

person Fred Appelman    schedule 28.01.2017