UIWebView 无法将 JavaScript 作为 document.getElementById 运行,返回 nu

UIWebView unable to run JavaScript as document.getElementById returns null

本文关键字:运行 getElementById 返回 nu document 作为 JavaScript UIWebView      更新时间:2023-09-26

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

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

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

我的理解是,在页面完全加载之前,UIWebView 不会原谅任何 JS,因此假设在创建元素之前尝试访问元素不会成为问题。

这是我正在尝试编辑的特定字段 1 的 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。