2011-01-22 3 views
1

다음 시나리오는 내가 가지고있는 문제입니다. Javascript가이 시나리오를 관찰하여 실행될 때 jQuery가 준비되어 있지 않아야한다는 결론에 도달했습니다.jQuery 준비가되지 않았을 때 자바 스크립트 실행

시나리오 :

나는 현재로드 된 DOM 페이지에 자바 스크립트 스크립트 태그를 주입하는 Java 응용 프로그램이 있습니다. 다음 자바 코드는 인 jailery.jsmyCode.js을 삽입하는 인라인 자바 스크립트를 실행합니다. myCode.js에는 자바 스크립트 코드가 있습니다. 이 Java 응용 프로그램에서

browser.executeJavaScript("var head= document.getElementsByTagName('head')[0];" + 
           "var script= document.createElement('script');script.type= 'text/javascript';script.src= 'jquery.js';head.appendChild(script);" + 
           "var script4= document.createElement('script');script4.type= 'text/javascript';script4.src= 'http://myCode.js';head.appendChild(script4);"); 

는 또한 의 actionPerformed()에 myCode.js에서 함수를 발생시키는 buttonListener이있다;

executedJS = browser.executeJavaScript("replaceAllLinks()"); 

발생하는 문제는 단추를 클릭하면 위의 행에서 nullPointerException입니다. null 케이스의 결과는 변경없이 무한 루프가됩니다.

while(executedJS == null) browser.executeJavaScript("replaceAllLinks()"); 

문제의 원인의 jQuery 함수, 메소드) (replaceAllLinks 안에 존재할 때까지 정확히시켰다 자바 스크립트 기능. jQuery 메서드가 없으면 문제가 발생하지 않았습니다. nullPointerException 발생한 인스턴스가 하나도 없습니다.

유일하게 가능한 기본 문제는 어떻게 든 jQuery 라이브러리가 완전히로드되지 않은 것입니다. replaceAllLinks();이 실행 중입니다. jQuery 메서드와 함수가 사용되지 않으면 문제가되지 않으며 모든 것이 제대로 실행됩니다.

제 질문은 jQuery가 완전히로드되어 사용 가능한지 어떻게 확인할 수 있습니까?

+0

$ (문서) .ready는 어디에 있습니까? – jmort253

답변

1

jQuery에 의존하는 모든 스크립트는 DOM 준비 기능 내에 포함되어야합니다. 것

$(document).ready(function() { 
    /* code here */ 
}); 

과 같은 일을 달성하기 바로 가기 : http://api.jquery.com/ready/

+0

+1, 이것은 분명히 이것을하는 jQuery 방법이다. – Exelian

0

: 여기

$(function() { 
    /* code here */ 
}); 

이 준비 방법에 대한 자세한 정보는 문서의 이러한 기능은 일반적으로이 형식을 취 일부 전역 변수 at the end jquery.js를 선언하십시오.

window.jQueryIsLoaded=true; 

그리고 jQuery를 사용하기 전에이 변수를 확인하십시오.

<edit>아래의 Salman A의 설명을 참조하십시오. 올바른 답을 입력하십시오.</edit>

+0

Infact, 당신은'typeof jQuery! == 'undefined'를 확인할 수 있습니다. –

+0

하지만이 경우 jQuery가 완전히 다운로드되었는지 확인 하시겠습니까? –

+0

좋아요, jquery.js를 살펴 보았습니다. jQuery를 알고 있으면 완료해야합니다. –

관련 문제