2015-02-03 5 views
0

В настоящее время я пытаюсь запустить несколько бит JS в своем веб-браузере, чтобы просто заполнить несколько текстовых полей на стороннем сайте. Это до сих пор было успешным на других сайтах, но я, похоже, получаю проблемы с определенным URL-адресом.UIWebView не может запускать JavaScript как document.getElementById возвращает null

let loadFirstNameJS = "var inputFields = document.getElementById('Field1'); inputFields.value = '\(firstName)';" 
self.webView.stringByEvaluatingJavaScriptFromString(loadFirstNameJS) 

Выполнение JS для ввода строкового значения (firstName) ранее было простым. Однако я не могу получить доступ к элементу 'Field1', поскольку он выглядит так, как будто его не существует? (возврат нулевого значения), хотя я могу просматривать и редактировать в браузере.

Было мое понимание, что UIWebView не оправдывает никакой JS до тех пор, пока страница не будет полностью загружена, поэтому предположим, что не может быть проблемой попытки доступа к элементу до его создания.

Вот html конкретного поля1, который я пытаюсь изменить.

<li id="fo134li1" class="notranslate leftHalf  "> 
<label class="desc" id="title1" for="Field1"> 
    First Name 
      <span id="req_1" class="req">*</span> 
     </label> 
<div> 
    <input id="Field1" name="Field1" type="text" class="field text medium" value="" maxlength="255" tabindex="2" onkeyup="handleInput(this); " onchange="handleInput(this);" required=""> 
     </div> 
</li> 

Это одна из последних вещей, которые мне нужно работать, прежде чем мой проект будет завершен, так что любая помощь, почему это не работает было бы весьма признателен!

Спасибо!

ответ

0

Вы должны действительно отслеживать загрузку страницы и не запускать javascript до тех пор, пока не увидите загрузку страницы. Возможно, вы слишком быстро выполняете его.

Вы можете обнаружить начало нагрузки путем внедрения

- (void)webViewDidStartLoad:(UIWebView *)webView 

и обнаружения конца путем внедрения

- (void)webViewDidFinishLoad:(UIWebView *)webView 

или обнаружения ошибок путем внедрения

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 

Вы должны держать отслеживать, сколько загрузок начинается и заканчивается, так как некоторые страницы могут загружать другие страницы. Когда все страницы закончены, запустите javascript.

+0

извинений, должны были отметить, что «self.stringByEvaluatingJavaScriptFromString (loadFirstNameJS)» выше всего выполняется в «Func webViewDidFinishLoad (WebView: UIWebView)» Я реализованный небольшую Println() во всех 3-х методах выше и мой журнал консоли не подтверждает никаких ошибок, и страница запускает и заканчивает загрузку. Проверка этого на других веб-сайтах. Я знаю, что заполняет текстовые поля, я не получаю консольный журнал завершения загрузки. –

+0

Можете ли вы загрузить URL-адрес с помощью Safari и запустить JS в консоли веб-инспектора? Если это так, то это скорее всего ваш код. Если нет, используйте веб-инспектор для отладки. Я полагаю, что для этого URL нет аутентификации, поскольку UIWebView не обрабатывает ни одно из них для вас? –

+0

Спасибо, Роури, похоже, что элементы, которые я пытаюсь получить, расположены внутри iframe (объясняет, почему это было не так просто, как первоначально предполагалось). Странно, что запрос на доступ к кадру имеет протокол http, но к кадру, к которому обращаются, имеет протокол https, поэтому Safari блокирует это при попытке получить доступ к содержимому/окну iframes, где текстовые поля связаны с моей JS. –