我试图将javascript注入WKWebView,以便将商品添加到网站上的购物车中。
我有一个按钮:
<input type="submit" name="commit" value="add to cart" class="button">
这是我的代码:
webView.evaluateJavaScript("document.querySelector('[value=\"add to cart\"]').click();") { (result, error) in
if error != nil {
print("Error: ", result)
}
}
//do something
运行此代码时,我收到nil错误。我还尝试插入类型submit
作为选择器,但仍然导致nil。 DOM是否可能尚未加载?我尝试通过在评估javascript之前添加一个临时sleep(3)来解决此问题,但仍然没有解决任何问题。
答案 0 :(得分:0)
您可以按名称获取它,然后向其添加一个点击侦听器。
document.getElementsByName(“ commit”)[0] .addEventListener('click',myFunction,false);
函数myFunction(){
//您的代码在这里
}
答案 1 :(得分:0)
您几乎明白了。但是,您要在HTML元素上调用click()
,然后再为该元素附加事件侦听器。您应该先添加一个eventListener
,然后调用click事件。
尝试一下:
webView.evaluateJavaScript("document.getElementsByName(\"commit\"]')[0].addEventListener('click', event => { <YOUR CODE GOES HERE> });") { (result, error) in
if error != nil {
print("Error: ", result)
}
}
将<YOUR CODE GOES HERE>
替换为单击时要执行的操作,或将event => {}
回调函数替换为先前定义的函数的名称。
webView.evaluateJavaScript("document.getElementsByName('[name=\"commit\"]')[0].click()") { (result, error) in
if error != nil {
print("Error: ", result)
}
}
请记住,document.getElementsByName
返回与查询匹配的元素数组,因此返回[0]
。如果您输入其他名称为 commit
答案 2 :(得分:-1)
<script>
function testing() {
//your code here
}
</script>
<!-- add onclick to yours html button -->
<input type="button" value = "Test" onclick="testing();">