UIWebView无法运行JavaScript,因为document.getElementById返回null

时间:2015-02-03 12:10:41

标签: javascript ios swift uiwebview getelementbyid

我目前正在尝试在我的webView中运行一些JS来简单地填写第三方网站上的一些文本字段。到目前为止,这已经在其他网站上取得了成功,但我似乎遇到了特定网址的问题。

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

执行JS以输入字符串值(firstName)以前很简单。但是我似乎无法访问元素'Field1',因为它看起来好像不存在? (返回空值)即使我能够在浏览器中查看和编辑。

据我所知,UIWebView在页面完全加载之前不会原谅任何JS,因此假设在创建元素之前尝试访问该元素不是问题。

这是我想要编辑的特定Field1的html。

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

这是我在项目完成之前需要解决的最后一件事,所以对于为什么这不起作用的任何帮助都将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该真正跟踪页面加载,而不是运行javascript,直到您看到页面加载完毕。你可能执行得太快了。

您可以通过实施

来检测负载的开始
- (void)webViewDidStartLoad:(UIWebView *)webView

并通过实施

来检测结束
- (void)webViewDidFinishLoad:(UIWebView *)webView

或通过实施

检测错误
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

您需要跟踪开始和结束的加载次数,因为某些页面可以加载其他页面。完成所有页面后,运行您的javascript。