2013-03-07 20 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還要注意,調用本地的變量「結果」或者比函數名以外的東西搬到這兒來了一些潛在的混亂。

相關問題