В зависимости от URL, иногда несколько URLs могут быть загружены, например, предположим, что вы загрузите URL http://www.zagat.com/ в UIWebView тогда shouldStartLoadWithRequest: будет вызываться много раз с URLs следующим образом:Как определить, когда UIWebView действительно закончил загрузку при перенаправлении?
http://www.zagat.com/
http://pixel.fetchback.com/serve/fb/pdj?cat=&name=landing&sid=3997
https://m.google.com/app/plus/poswidget/?hl=en-US&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1#url=http%3A%2F%2Fwww.zagat.com%2F&size=small&count=true&id=I1_1331701330274&parent=http%3A%2F%2Fwww.zagat.com&rpctoken=375018132&_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart
http://pixel.fetchback.com/serve/fb/blank
https://www.googleapis.com/static/proxy.html?jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1#parent=https%3A%2F%2Fm.google.com&rpctoken=809526044
https://m.google.com/app/plus/poswidget/?hl=en-US&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1#bub=1&url=http://www.zagat.com/&id=I2_1331701333045&parent=http%3A%2F%2Fwww.zagat.com&rpctoken=257947967&_methods=_onopen%2C_ready%2C_onclose%2C_close%2C_open%2C_resizeMe%2C_renderstart
(полученный путем добавления NSLog to shouldShartLoadWithRequest)
Как загрузить один URL-адрес может привести к загрузке нескольких URL-адресов с помощью UIWebView, как можно узнать, когда загруженная вами страница полностью загружена?
Я попытался инъекционным следующий JavaScript на страницу:
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = window.onload = function DOMHasLoaded() {
document.location.href = "mydomain://anything.stuff";
};
Но при выполнении порядка адресов, переданных shouldStartLoadWithRequest является:
http://www.zagat.com/
http://pixel.fetchback.com/serve/fb/pdj?cat=&name=landing&sid=3997
http://pixel.fetchback.com/serve/fb/blank
https://m.google.com/app/plus/poswidget/?hl=en-US&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1#url=http%3A%2F%2Fwww.zagat.com%2F&size=small&count=true&id=I1_1331701452309&parent=http%3A%2F%2Fwww.zagat.com&rpctoken=248478838&_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart
https://www.googleapis.com/static/proxy.html?jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1#parent=https%3A%2F%2Fm.google.com&rpctoken=230813838
mydomain://anything.stuff
https://m.google.com/app/plus/poswidget/?hl=en-US&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1&jsh=m%3B%2F_%2Fapps-static%2F_%2Fjs%2Fgapi%2F__features__%2Frt%3Dj%2Fver%3Dt_fRXLZrGUk.en_US.%2Fsv%3D1%2Fam%3D!wJ3zzZyr7MyIPjLesA%2Fd%3D1#bub=1&url=http://www.zagat.com/&id=I2_1331701453238&parent=http%3A%2F%2Fwww
т.е. MYDOMAIN: //anything.stuff получает прошло to shouldStartLoadWithRequest в результате изменения document.location.href, но он не передается в качестве окончательного URL-адреса.
Итак, как можно узнать, когда страница окончательно завершила загрузку и больше не будет обрабатываться URL?
Благодарим за ответ - что вы подразумеваете под этим, отрезая легкую поддержку некоторых документов? – Gruntcakes
Предположим, что вы хотите отобразить документ MS Word в UIWebView, есть только два способа сделать это afaik: загрузить его непосредственно из Web с помощью [webview loadRequest: это работает отлично, но если у меня есть NSData-содержимое файла, я имею чтобы сохранить файл в песочнице и использовать loadRequest с локальным запросом url, потому что loadData: по моему опыту работает не так хорошо (это дало мне пустой вид с правильным типом mime, указанным, в то время как loadRequest отображал даже файлы docx снова iOS 3.1). –