0

次のように、JavaScriptコードを実行するcrawljax用のプラグインを作成しようとしています:

String result = browser.executeJavaScript(script).toString();

およびスクリプト コード:

function getElementPosition(id) {
var element = document.getElementById(id);
return JSON.stringify(elementpos(findPosX(element), findPosY(element)));
}

function elementpos(x, y) {
elementpos = new Object();
elementpos.x = x;
elementpos.y = y;
return elementpos;
}


return getElementPosition("foo");

これは正常に返されますが、結果は常に null です。document.write を使用して同じものを出力しても、うまくフォーマットされた JSON 文字列が得られます。

{"x":8, "y":24}

私は何か誤解していますか?JSON 文字列と Java で起こる奇妙なことはありますか? 私はJavaScriptの経験があまりないので、そのまま戻ってはいけませんか?

これを Google Chrome v. 25 でテストしています。

注:Crawljax自体とは何の関係もないと思います。JSON文字列を返すスクリプトもある別のプラグイン(他の誰かによって書かれたもの)があるためですが、それは完全にうまくいくようです...

4

2 に答える 2

1

JavaScript はnew Object();にアレルギーがあります。ショートカットを実行し、以下のものを試してください。解決する可能性があります。

 return JSON.stringify({x:findPosX(element), y:findPosY(element)});

new Object();で作成されたオブジェクト 構文は、javascript に多くの奇妙な問題をもたらします。

于 2013-03-08T23:24:29.097 に答える
0

ここでの問題は new Object() にあるとは思いませんが、その点で私が間違っている場合は、コメント者に気軽に記入してください。これを試して:

function elementpos(x, y) {
    var elementpos = new Object();
    elementpos.x = x;
    elementpos.y = y;
    return elementpos;
}

「elementpos = new Object();」の前に「var」を置いたことに注意してください。その変数定義がなければ、グローバルな「elementpos」関数の最初の行は、それ自体を「elementpos」オブジェクトに置き換えます。最初の実行はおそらく問題ありませんが、2 回目の実行では new Object() の結果を呼び出す関数として処理しようとするため、例外が発生して失敗する可能性があります。

上記のコードを実行し、chrome 40 で問題なく結果を文字列化することができました。また、ローカル変数「result」または関数名以外の何かを呼び出すと、ここで潜在的な混乱が解消されることに注意してください。

于 2015-01-28T07:13:26.593 に答える