2013-03-07 7 views
0

나는이 같은 일부 자바 스크립트 코드를 실행 crawljax위한 플러그인 작성하기 위해 노력하고있어 :JSON 캐릭터 라인 화는 null를 돌려줍니다 만, document.write를 출력합니다 제대로

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 문자열을 얻을에도 불구하고, null의

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

나는 오해를하고 있습니까? JSON 문자열과 java에서 이상한 일이 발생합니까? 나는 자바 스크립트에서 많은 경험이 없기 때문에 그냥 그렇게 돌아갈 수 없습니까?

내가 구글 크롬에이를 테스트하고있어 25 절

참고 :. (다른 사람에 의해 쓰여진) 별도의 플러그인을, 프로그래머로서 나는 그것이 Crawljax 자체와 아무있어 생각하지 않는 또한 JSON 문자열을 반환하는 스크립트가 있지만 완벽하게 작동하는 것 같습니다 ...

+0

코드에 약간의 오타가 있습니다. 첫 번째 반환의 줄 끝에 괄호가 없습니다. 그러나 elementPos는 무엇을 반환합니까? 또는 물체? – benzonico

+0

http://jsfiddle.net/에서 문제를 재현하고 @benzonico와 같이 누락 된 괄호를 수정 한 후에 링크를 게시 할 수 있습니까? –

+0

내 소스에서 복사하여 붙여 넣지 않았습니다. 나는 그것을 타이핑했다. 내 소스에 괄호가 없습니다. – Daniel

답변

1

JavaScript는 에 알레르기가 있습니다. 새 Object(); 바로 가기를 수행하고 해결할 수있는 아래의 방법을 시도해보십시오.

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

으로 만든 개체 new Object(); 구문은 자바 스크립트에서 많은 이상한 문제를 가져옵니다.

+0

네, 마침내 알아 냈습니다. 자바 스크립트 newb로서 나는 전혀 몰랐다. – Daniel

0

저는 여기에 새로운 Object()가 있다고 생각하지 않지만, 저의 의견이 잘못되었다고 생각하시는 분은 저를 채워 주시기 바랍니다. 이것을보십시오 :

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

"elementpos = new Object();"앞에 "var"를 넣었습니다. 변수 정의가 없다면 전역 "elementpos"함수의 첫 번째 줄은 "elementpos"객체로 자체를 대체하는 것입니다. 처음 실행하면 정상적으로 작동하지만 새 Object() 결과를 호출 할 함수로 처리 할 때 예외가 발생하면 두 번째 시간이 실패 할 가능성이 큽니다.

chrome 40에서 위의 코드를 실행하고 아무런 문제없이 결과를 문자열로 나타낼 수있었습니다. 지역 변수 "result"또는 함수 이름 이외의 다른 것을 호출하면 여기에 잠재적 인 혼동이 제거됩니다.

관련 문제