2011-04-07 4 views
26

ben nasıl belirleneceğini öğrenmek istiyorum. Android WebView tamamen yüklenirken ne zaman belirlenir? Bir WebView yükleme yapılması tamamen <strong><em></em></strong> olduğunda

beni tamamen tanımlayalım. - yönlendirmeler varsa bu birden çok kez ateşler

WebViewClient.onPageFinished():

  • Tüm yönlendirmeler şey bu soruya

Kötü cevapları yüklemek için henüz, sayfa gözle görülür görüntülenir

  • meydana gelmiş bir sayfa yükleniyor. Ayrıca sayfa görüntülenmeden önce de patlar.

    PictureListener.onNewPicture() - bu ekran değişiklikler ve AFAICT her yönlendirmek her zaman ateşler. Nihai ateşin hangisi olduğunu nasıl bilebilirim?

    WebChromeClient.onProgressChanged() - onPageFinished ile aynı sorun. Bu niçin kabul edilemez olduğunu, açık olmalı -

    Thread.sleep(5000) (David aşağıda bu çözümü önerdi sonra eklendi). Tabii ki, yukarıda belirtilenlerin akıllıca bir kombinasyonu mükemmel olurdu.

    Bunu neden sormak istiyorum? webview yükleme yapılması tamamen bir kez bazı javascript bir kez enjekte etmek istiyorum.

  • +1

    WebViewClient.onPageFinished() 'nize" kötü yanıt "ekleme: [this] 'e göre (http://stackoverflow.com/a/5172952/725417), birden çok kez ** tetiklenir. Bir sayfada birkaç iframe var. – uTubeFan

    +0

    @Carlos Man olduğun gibi aynı pozisyondayım.Durumumu daha da kötüleştiren tek şey, PictureListener'ın kullanımdan kaldırılmış olmasıdır. Bir çözüm bulabildin mi? İçerik genişliğini ekranın genişliğine bölmem gereken web sayfası toplam sayfa sayısını hesaplamam gerekiyor. Ancak, sayfa tamamen ekranda görünene kadar bunu yapamam. Herhangi bir çözüm? –

    +0

    @ArunavhKrishnan Son baktığımda 3 yıl önceydi. Sonunda kabul edilen cevaba benzer bir şey yaptığımı düşünüyorum. İyi şanslar! –

    cevap

    8

    Davranış başlıklarına bakma önerisi nedeniyle David Caunt'a teşekkür ederiz.

    oldukça iyi çalışmak için aşağıdaki bulduk:

    Bunun yerine, webview HTTP isteklerini gerçekleştirmek zorunda

    kendin böylece yönlendirmeler için HTTP durum kodunu kontrol edebilirsiniz bunları yapmak. Yönlendirme zincirini takip edin. Yönlendirme olmayan bir isteğiniz olduğunda, bir bayrak ayarlayın ve verileri webview.loadDataWithBaseURL aracılığıyla web görünümüne gönderin. Bayrak, WebViewClient.onPageFinished()'da kontrol edilir, böylece tüm yönlendirmelerin yapıldığı bilinir. Javascript bu noktada enjekte edilebilir. Tabii ki sayfanın kendisi bu noktada bazı javascript manipülasyon yapıyor olabilir, bilmek zordur, bu yüzden javascript'e bir gecikme (500ms demek) eklemek DOM'un yerleşmesine izin verir. setTimeout(function(){/* your code */}, 500).

    +1

    Bilmek için Faydalı! Sayfanın kendi javascript'i için, ne zaman bittiğini tespit etmek zor. Mükemmel bir taslak için –

    +1

    @ Carsil Rendon +1. Bunun WebView veya uydu arayüzlerinden herhangi birinde uygulanmadığına şaşırdım. Bu özellik çok fazla ihtiyaç duyuyor, ancak WebView üyelerinin yapabildikleri tek şey, PictureListener'ı kullanımdan kaldırıyor. Bir fikrin neden? – uTubeFan

    +0

    Ve bu sırada, [bir Web Görünümünde http yanıtı başlıklarına erişme] hakkında hayal ettiğim tek kişi olmadığım ortaya çıkıyor (http://stackoverflow.com/questions/3134389/access-the-http-response-headers -in-a-WebView'da). – uTubeFan

    1

    Kendi WebChromeClient'inizi ayarlamayı düşündünüz mü?

    Bir Sayfa tamamen yüklendiğinde sizi bilgilendirir onProgressUpdated benziyor.

    Bu, Android'in yerleşik tarayıcısı tarafından kullanılan yöntem olarak görünüyor.

    +0

    Öneriniz için teşekkürler. Unfortunatley, bu WebViewClient.onPageFinished() ile aynı soruna sahip, yönlendirmeler nedeniyle birkaç kez ateşler. Örneğin "gmail.com" da, ilerleme == 100 ile 3 kez tetiklenir. –

    +1

    İlerleme için sonraki 0 ​​değeri ne zaman gelir? Bir yanıt bir yönlendirmeden sonra hemen patlarsa, bir zaman aşımı kullanmak ve son isteğiniz olduğunu varsaymak güvenli olabilir. Aksi takdirde, yanıt başlıklarını veya benzer bir şeyi almanın bir yolunu arardım. –