使用基于UIWebView中的位置的javascript以编程方式获取元素,然后单击它们

时间:2011-11-10 05:14:13

标签: javascript ios uiwebview

我正在尝试从UIWebView中获取基于坐标的可点击元素(“坐标x,y是什么?”),检索有关它们的信息(“它是链接吗?它去哪了?”),以及然后以编程方式单击它们,我遇到了一些问题。

elementFromPoint(x,y)在获取给定位置的元素方面表现非常出色,但如果我在<span>内有<a>,则会报告跨度而不是<a>。有没有办法解决这个问题?或者转到此元素上方的父级,但是在相同的坐标处,如果它不可单击?

此外,click()适用于按钮,但不适用于链接。如何在链接或鼠标悬停上模拟鼠标单击(或点击)?我在元素上尝试了onmouseover(),但是没有用。

或者,页面上是否有任何类型的鼠标对象可以通过编程方式移动并且可以实现我想要的效果?

2 个答案:

答案 0 :(得分:2)

所以我最后为“鼠标悬停”部分所做的只是检查给定元素是锚还是表单对象,如果不是,我去了parentNode并检查它,我这样做了2个父母在放弃之前。这似乎足以让自己获得链接。

对于单击元素,它更容易,因为我不必遍历层次结构。我只是创建鼠标单击事件并将其传递给elementFromPoint()中检测到的元素,页面将自动将其转发到层次结构本身。

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"var theEvent = document.createEvent('MouseEvent');\n theEvent.initMouseEvent('click', true, true, window);\n awElement.dispatchEvent(theEvent);\n awElement.click();\n", mouseX, mouseY]];

太容易了!只是希望我能做同样的事情来获得元素的链接。

答案 1 :(得分:0)

如果我的理解是正确的。

尝试"document.location"并设置您需要导航到的值字符串。

UIWebViewDelegate函数 - shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {将被调用,请求URL将为您提供。