2015-01-30 4 views
1

Я делаю iOS APP, данные которого поступают с веб-сайта. Я собираюсь выяснить, как загружать больше данных, когда пользователи прокручивали tableView на дно.UIWebView Trigger Загрузите больше с сайта Ajax

ПРИМЕЧАНИЕ: UIWebView я создал в фоновом режиме, так что я могу получить содержание того, что Webview показывает в этой халтуры способом, но то, что пользователи могут взаимодействовать только является UITableView, однако.

Причина, по которой мои APP нужны, поступает с веб-сайта (Ajax). Я использовал этот метод для получения содержимого веб-сайта. Да, я сделал это с UIWebView в методе делегата webView:shouldStartLoadWithRequest.

NSString *htmlString = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.innerHTML"]; 

Это прекрасно работает, и у меня есть контент.

Но проблема возникла, как я уже говорил ранее, когда пользователь прокручивает вниз, tableView необходимо загрузить больше данных. Итак, моему UIWebView также необходимо загрузить больше контента для анализа большего количества данных из контента, чтобы tableView мог идти вперед. Примечание: Я НЕ контролирую страницы на сервере, поэтому я не смог получить API. (Будет возможно запрос междоменное?)

Я думал об этих 2 методов:

МЕТОД 1. Смоделировать салфетки жест, чтобы вызвать нагрузки более (Когда Webview прокрутки вниз, больше нагрузки срабатывает автоматически)

МЕТОД 2. Внесите JavaScript, чтобы сообщить UIWebView, чтобы загрузить больше данных.

Я использовал инструмент разработчика в Chrome, чтобы получить больше запросов на загрузку. Вот что я получил.

Remote Address:54.165.215.138:443 
Request URL:https://color.adobe.com/api/v2/themes?filter=public&startIndex=144&maxNumber=36&sort=like_count&time=week 
Request Method:GET 
Status Code:200 OK 
Request Headersview source 
Accept:application/json, text/javascript, */*; q=0.01 
Accept-Encoding:gzip, deflate, sdch 
accept-language:zh 
accept-version:2.0.0 
Cache-Control:max-age=0 
Connection:keep-alive 
Content-Type:application/json 
Cookie:[email protected]=T; international=cn; storeregion=cn; __lc.visitor_id.1031448=S1421040023.3b40036efc; 57472748-VID=111520816; sfdc_session=-; mbox=PC#1422579254596-83420.19_07#1423794285|session#1422583820268-575696#1422586545|check#true#1422584745; kuler-loc=zh; cookies-enabled=1; s_pers=%20s_fid%3D35A9926601E31AD1-1D7E51664BFBD9C5%7C1485743101094%3B%20s_vs%3D1%7C1422586501096%3B%20gpv%3Dcolor.adobe.com%2520%253A%2520Explore%2520%253A%2520Most%2520Popular%2520%253A%2520Week%7C1422586501098%3B%20s_nr%3D1422584701102-Repeat%7C1454120701102%3B; s_sess=%20s_ppv%3D-%252C100%252C18%252C8054%3B%20s_cpc%3D0%3B%20s_cc%3Dtrue%3B%20s_sq%3D%3B; s_vi=[CS]v1|2A3C2EE20548B5C7-40000105000065EB[CE]; aam_uuid=33030698550757492143013270951098470183 
Host:color.adobe.com 
If-Modified-Since:Sat, 1 Jan 2000 00:00:00 GMT 
Referer:https://color.adobe.com/zh/explore/most-popular/?time=week 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36 
x-api-key:7810788A1CFDC3A717C58F96BC4DD8B4 
X-NewRelic-ID:UQAPV1JRGwEGV1RVBgQ= 
X-Requested-With:XMLHttpRequest 
Query String Parametersview sourceview URL encoded 
filter:public 
startIndex:144 
maxNumber:36 
sort:like_count 
time:week 
Response Headersview source 
Access-Control-Allow-Headers:Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Content-Language, Date, Api-Version, Response-Time, X-API-Key 
Access-Control-Allow-Methods:GET, POST 
Access-Control-Allow-Origin:* 
Access-Control-Expose-Headers:Api-Version, Request-Id, Response-Time, X-API-Key 
Api-Version:2.0.0 
Cache-Control:no-cache, must-revalidate 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Language:zh 
Content-MD5:Hbz5uI3q/P2aEQ0+0TfZgg== 
Content-Security-Policy:default-src 'self'; img-src 'self' *.behance.net *.s2stagehance.com data: *.typekit.net *.adobe.com *.newrelic.com *.nr-data.net; font-src 'self' data: *.typekit.net; style-src 'self' 'unsafe-inline' *.typekit.net *.adobe.com adobe.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.services.adobe.com *.adobe.com *.adobetag.com *.typekit.net *.tt.omtrdc.net adobe.demdex.net *.newrelic.com *.adobelogin.com *.behance.net net.s2stagehance.com *.adobesunbreak.com; frame-src 'self' *.services.adobe.com *.adobelogin.com *.adobe.com adobe.com *.adobeku.com *.facebook.com *.adobe.demdex.net adobe.demdex.net; report-uri /api/v2/csp-reports; connect-src 'self' accounts.adobe.com www-stage.adobesunbreak.com *.services.adobe.com; 
Content-Type:application/json 
Date:Fri, 30 Jan 2015 02:25:26 GMT 
Expires:-1 
Request-Id:4043bed0-a827-11e4-98a0-81fb44ac31c8 
Response-Time:20 
Server:kuler-prod 
Strict-Transport-Security:max-age=31104000 
transfer-encoding:chunked 
X-Content-Type-Options:nosniff 
X-Frame-Options:SAMEORIGIN 
X-XSS-Protection:1; mode=block 

Так мне интересно, есть ли способ, чтобы вызвать нагрузки Более в UIWebView. Есть ли способ взломать это? Если мой вопрос не ясен, не стесняйтесь спрашивать. Благодарю.

+0

Множество данных - это данные, а не данные. Данные приемлемы как для сингулярной, так и для множественной формы. – ozz

ответ

1

Определите в HTML-странице веб-страницы, какую функцию javascript вызывается при прокрутке вниз, а затем просто вызывайте эту функцию с помощью stringByEvaluatingJavaScriptFromString:, после чего эта функция вызовет UIWebView. Однако недостатком является то, что вы не будете уведомлены каким-либо образом, когда новый контент был загружен AJAX, поэтому вам придется придумать еще один способ обхода проблемы.

Кроме того, вы упомянули:

Я НЕ контролирует страницы на сервере

Что я прочитал как:

Мое приложение может сломаться, если изменения страницы

Почему вы строите приложение вокруг веб-страницу, которая может измениться, а не напрямую связываться с документированным API?

1

Это полностью зависит от того, как веб-страница загружает больше контента (то есть, что такое вызов JS и как они знают, когда его называть). В целом, хотя ваше приложение полагается на контент какого-либо сайта, который вы не контролируете, это не очень хорошая идея. Если они изменят свой формат, ваше приложение сломается, и вам нужно будет отправить обновление приложения.

Если вам абсолютно необходимы данные с этого веб-сайта, я бы создал вашу собственную веб-службу для переноса, которая принимает требуемые параметры (например, номер страницы) и возвращает нужные вам данные. Преимущества этого метода заключаются в следующем:

  1. Если веб-сайт изменяет форматы, вы можете быстро развернуть обновление службы без повторной отправки вашего приложения.
  2. Ваши старые версии приложения будут продолжать работать, даже если веб-сайт изменит свой формат.
Смежные вопросы