2009-02-20 2 views
12

JavaScript 함수를 호출하고 논문 기능에서 결과를 기대하는 브라우저에서 Java 애플릿을 실행하고 있습니다. 이것은 다음과 같은 구성과 협력 :Mac OS에서 Firefox의 Java 애플릿이 자바 스크립트와 통신 할 수 없습니까?

  • 인터넷 익스플로러
  • 파이어 폭스/윈도우를
  • 사파리/맥

하지만 그것은 MAC OS

의 소스 파이어 폭스와 함께 작동하지 않습니다 문제는 항상 null을 반환하는 win.eval 호출 인 것 같습니다. 나는 맥 OS의 X 10.4.11

코드의 비트에 파이어 폭스 3.0.6과 함께이 테스트 :이 java.lang.NullPointerException이 (exp.toString()) 문을 트리거

JSObject win = (JSObject) JSObject.getWindow(this); 
Object exp = win.eval("testfunc()"); 
System.out.println("exp = " + exp.toString()); 

) . testfunc javascript 함수는 true를 반환합니다.

나는 win.call을 사용해 보았는데 같은 결과를 얻었다.

내 애플릿 태그에는 mayscript 및 스크립트 가능한 속성이 포함되어 있습니다.


트리스탄에 대한 답변을 찾았습니다. 자신의 솔루션을 테스트 한 결과 나는 범인을 찾는데 도움이되는 간단한 테스트를 만들었습니다. 나는 방금 true를 반환 한 빈 testfunc()를 사용하여 내 테스트를 수행했다는 것을 확신했지만, 아마도 그렇게하지 않았을 것입니다. 실제 문제는이 함수가 애플릿의 public 메서드를 호출한다는 것입니다. Liveconnect는 Firefox Mac에서이 케이스를 처리 할 수없는 것 같습니다.)합니다 (getMyValue를 호출 jsfunc 왜냐면

function jsfunc() { 
    var myApplet = document.getElementById("applet_id"); 
    return myApplet.getMyValue() + 5; 
} 

특급이 된 SomeFuncion에 null이됩니다 :

자바 클래스 :

public class MyApplet extends Applet { 
    public int getMyValue() { 
     return 5; 
    } 

    public void somefunction() { 
     JSObject win = (JSObject) JSObject.getWindow(this); 
     Object exp = win.eval("jsfunc()"); 
     System.out.println("exp = " + exp.toString()); 
    } 
} 

그리고 자바 스크립트 코드

저가 당신에게 예를 보자 애플릿의 메소드 애플릿 속성에 대한 모든 호출을 제거하면 멋지게됩니다.
내 문제를 해결하기 위해 필자는 자바 스크립트 함수의 매개 변수로 사용했던 애플릿의 모든 값을 제공하기로 결정했습니다.
자바 스크립트가 애플릿의 상태를 변경하면 항상 그렇지 않을 수도 있습니다. 행운이었습니다. :)

답변

3

화면상의 전역 객체 중 하나에 액세스하면 작동합니까? 인체 공학적, 자바 스크립트에서

:

window.testfunc = function() { //... } 

애플릿은 :

win.eval("window.testfunc()") // or maybe just win.eval("testfunc()") 

내 실험이 될 것이라고. 하지만 나는 "window.close()"를 FF로 Mac OS X에서 호출하고 있는데, 여전히 작동합니다.

+0

함수를 호출해도 문제가 발생하지 않으며 결과를 다시 얻습니다. 디버그 문을 사용하면 함수가 실행되었음을 분명히 알 수 있지만 반환 값은 손실되어 결국 "null"만 얻습니다. –

4

잠시 애플릿 API를 사용하지는 않았지만 애플릿에서 can JS 코드를 사용하려면 올바르게 애플릿 태그에서 mayscript 속성을 활성화하거나 객체 태그 표기법에서 params mayscript를 활성화해야합니다.

다른 방법으로 의사 소통을 위해 JS 당신은 또한 예를 들어 스크립트 속성 또는 매개 변수를 사용해야 애플릿이 스크립트 기능을 사용하도록 애플릿을 수 있습니다

<applet code="..." mayscript="true" /> 

.

<applet code="..." scriptable="true" /> 
+0

실제로 mayscript 및 scriptable 속성이 필요합니다. 하지만 이미 애플릿 태그에 포함 시켰습니다. 그렇지 않으면 다른 브라우저에서 전혀 작동하지 않습니다. –

0

애플릿 속성에 대한 모든 호출을 제거하면 멋지게됩니다.

이것은 다른 상황에서도 발생할 수 있습니다. 비슷한 문제를 검색 한 후에이 페이지를 찾았으므로 데이터 포인트를 추가 할 것입니다. 유일한 차이점은 win.eval() 대신 win.call()을 사용하고 있다는 것입니다.

자바 스크립트에서 alert() 호출을 사용하여 전화가 연결되었는지 확인하고 Firefox 3.0.9, OS X 10.5.6, Java 1.5.0_16에서 똑같은 잠금 장치가 있는지 확인했습니다. Firefox에서 100 % 반복 가능합니다. Safari에는 문제가 없습니다 (이 상자에는 Windows가 설치되어 있지 않습니다).

경고()를 제거하고 단순히 값을 반환하면 문제가 사라졌습니다.

Sooooo ... 잠시 후 자바 스크립트 시간 초과를 호출하고 단순히 null을 던지겠습니까?