element.tagname不返回<a> on links</a>

时间:2012-05-18 20:09:28

标签: javascript iphone tagname

我正在编写一个iPhone应用程序,它使用一些javascript代码来获取UIWebView上的一个点的元素。

我在iPhone上有一些经验,但没有javascript经验,我发现教程上的代码(here

// Javascript code
function MyAppGetHTMLElementsAtPoint(x,y) {
    var tags = ",";
    var e = document.elementFromPoint(x,y);
    while (e) {
        if (e.tagName) {
            tags += e.tagName + ',';
        }
        e = e.parentNode;
    }
    return tags;
}

// iPhone code
    NSString *tags = [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"MyAppGetHTMLElementsAtPoint(x,y);"]]
    if ([tags rangeOfString:@",A,"].location != NSNotFound) {
        NSLog(@"Link found");
        ....
    }

问题是我已经使用Google搜索网页测试了此代码,但我没有收到“找到链接”日志。

我认为这可能是因为页面不是完整的HTML,但我不能再做任何事了。

谢谢!

PD:我有同样的问题,但在所有页面上都没有,带有IMG标签(可能是因为CSS)

3 个答案:

答案 0 :(得分:2)

某些XHTML模式会在您将其放入源代码时返回tagName,因此它可能会更低。尝试拨打

tags += e.tagName.toUpperCase() + ',';

如果那不是问题,那么tags字符串包含什么?

完全无关的建议

数组是创建逗号分隔列表的最佳方式

function MyAppGetHTMLElementsAtPoint(x,y) {
    var tags = [];
    var e = document.elementFromPoint(x,y);
    while (e) {
        if (e.tagName) {
            tags.push(e.tagName);
        }
        e = e.parentNode;
    }
    return tags.join(',');
}

我提供了一个JSFiddle http://jsfiddle.net/cgpVk/1/,证明该功能正常运行。你可能没有传递正确的坐标

答案 1 :(得分:0)

您是否每次尝试记录e.tagName?然后你就可以看到你为这些链接获得了什么。

答案 2 :(得分:0)

根据@JuanMendes的建议,问题在于iPhone传递给javascript函数的坐标。

// Not working code
// Searches the location on the main view, that is the full screen
CGPoint pt = [gestureRecognizer locationInView:self.view];

// Working code
// Searches the location only on the webView
CGPoint pt = [gestureRecognizer locationInView:self.webView];

感谢那些帮助我的人,尤其是@JuanMendes