2

奇妙な振る舞いをする。にUIWebViewは、要素の位置を検出する javacript 関数があります。これです:

function getPosition(element){

    var el = element;
    var pos = [el.offsetLeft, el.offsetTop];
    var parent = el.offsetParent;
    if (parent != el) {
        while (parent) {
            pos[0] += parent.offsetLeft;
            pos[1] += parent.offsetTop;
            parent = parent.offsetParent;
        }
    }
    //alert(pos);
    return pos;
}

特別なことは何もありません...しかし、そのような関数を呼び出すと:

NSString *position = [browserWebView stringByEvaluatingJavaScriptFromString:@"getPosition(document.getElementById('exampleElement'));"];

私は空のNSString背中を取得します。関数にアラートを挿入すると(現在はコメント解除されています)、アラート内の正しい位置が得られます!!

正しい戻り値があるように見えるのに、値が返されず、空の文字列だけが取得されるのはなぜposですか?

4

1 に答える 1

3

これはかなり単純であると同時に、私にとっては完全な謎です。理由はわかりませんが、「stringByEvaluatingJavaScriptFromString:」は、javascriptの結果がすでに文字列に似ていることを好みます。コードを修正するには、返される配列にjoin()関数を追加するだけです。

return pos.join();

これにより、配列が1つの文字列に結合され、NSStringとして問題なく渡されます。

アラートが機能する理由は、同様の方法でデータを表示するサイトを壊さないためだと思います。

于 2012-09-27T18:56:57.433 に答える