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.
我目前正在尝试 运行 在我的 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.