UIWebView 无法 运行 JavaScript as document.getElementById returns null

UIWebView unable to run JavaScript as document.getElementById returns null

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

 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>

这是我在项目完成之前需要解决的最后一件事,因此,如果您能就此行不通的原因提供任何帮助,我们将不胜感激!

谢谢!

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

您可以通过实施

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

并通过实施

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

或通过实施

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

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