0

UIWebViewのポイントの要素を取得するために少しのJavaScriptコードを使用するiPhoneアプリをプログラミングしています。

私は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検索Webページでこのコードをテストしたのに、「リンクが見つかりました」ログが取得されないことです。

ページ全体が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(',');
}

関数が正常に機能していることを証明するJSFiddlehttp : //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 に答える