2013-03-07 51 views
0

我试图写crawljax插件运行一些JavaScript代码,就像这样:JSON字符串化返回null,但文件撰写打印出正确

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"); 

这成功返回,但结果总是为空,即使如果我使用document.write打印出同样的事情,我得到一个很好的格式化的JSON字符串

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

我误会了什么吗?有没有与JSON字符串和Java发生的一些奇怪的事情?我没有很多JavaScript的经验,所以我不允许像这样回来?

我在谷歌浏览器测试了这一点,V 25

注:我不认为它有什么关系Crawljax本身,因为那里有一个单独的插件(别人写的),这也有一个脚本,返回一个JSON字符串,但似乎完全正常工作......

+0

代码中有一个小错字,它在第一个返回行的末尾缺少括号。 但是,elementPos返回的是什么:一个字符串?或一个对象? – benzonico 2013-03-07 07:44:39

+0

您可以在http://jsfiddle.net/中重现您的问题,并在修复像@benzonico所说的缺失括号后发布链接: – 2013-03-07 16:31:28

+0

哎呀,这不是我的来源复制和粘贴;我输入了。我的来源没有丢失括号 – Daniel 2013-03-07 22:48:22

回答

1

的JavaScript是新对象过敏();做一个快捷方式,尝试下面的一个,这可能会解决;

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

使用创建的对象new Object();在JavaScript中,语法带来了许多奇怪的问题。

+0

是的,我终于明白了。作为一个javascript新手,我不知道。 – Daniel 2013-03-09 07:45:00

0

我不认为这里的问题是新的对象(),但评论者请随时告诉我那的,如果我错了,在这一点上。试试这个:

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

请注意,我已经把“var”放在“elementpos = new Object();”的前面。没有这个变量定义,全局“elementpos”函数的第一行就是用“elementpos”对象替换它自己。它第一次执行可能会正常,但第二次可能会因为异常而失败,因为它会尝试将新的Object()结果视为要调用的函数。

我能够执行上面的代码和字符串化的结果没有任何问题,在Chrome浏览器40还要注意,调用本地的变量“结果”或者比函数名以外的东西搬到这儿来了一些潜在的混乱。

相关问题