0

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

我对 iPhone 有一点经验,但没有使用 javascript 的经验,我在教程中找到了该代码(此处

// 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)

4

3 回答 3

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/证明该功能工作正常。你可能没有传递正确的坐标

于 2012-05-18T20:14:48.813 回答
0

您是否尝试过e.tagName每次记录?然后你可以看到你得到的链接。

于 2012-05-18T20:11:40.927 回答
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

于 2012-05-19T06:22:46.143 回答