【问题标题】:UIWebView unable to run JavaScript as document.getElementById returns nullUIWebView 无法运行 JavaScript,因为 document.getElementById 返回 null
【发布时间】:2015-02-03 12:10:41
【问题描述】:

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

 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 ios swift uiwebview getelementbyid


    【解决方案1】:

    您应该真正跟踪页面加载,并且在看到页面完成加载之前不要运行 javascript。你可能执行得太快了。

    您可以通过实现来检测负载的开始

    - (void)webViewDidStartLoad:(UIWebView *)webView
    

    并通过实现来检测结束

    - (void)webViewDidFinishLoad:(UIWebView *)webView
    

    或通过实施来检测错误

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

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

    【讨论】:

    • 抱歉,应该提到上面的 'self.stringByEvaluatingJavaScriptFromString(loadFirstNameJS)' 都在 'func webViewDidFinishLoad(webView: UIWebView)' 中执行 我已经实现了一个小的 println()上面的 3 种方法和我的控制台日志确认没有错误,页面开始并完成加载。用我知道的其他网站进行测试,完成文本字段,我没有得到任何完成加载的控制台日志。
    • 你能用 Safari 加载 URL 并在 web 检查器控制台中运行 JS 吗?如果是这样,那么很可能是您的代码。如果没有,则使用 Web 检查器进行调试。我认为这个 URL 没有身份验证,因为 UIWebView 不会为你处理任何这些?
    • 感谢 Rory,看起来我试图访问的元素位于 iframe 中(解释了为什么它不像最初想象的那么简单)。奇怪的是,请求访问的框架具有 http: 协议:但被访问的框架具有 https 协议,因此 Safari 在尝试使用我的 JS 访问文本字段所在的 iframe 内容/窗口时阻止了这一点。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2015-02-02
    • 2011-11-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多