2013-09-03 8 views
1

작년에 웹 애플리케이션에서 로컬 실행중인 java 서버로의 소켓 연결을 위해 Java 애플릿을 만들었습니다. 괜찮 았어.Javascript로 Java 애플릿 메소드를 호출하려면 어떻게해야합니까?

지난 자바 업데이트 (7 r21 내가 추측) 이후 자바 스크립트에서 더 이상 메소드에 액세스 할 수 없습니다. 지금 당장은 애플릿을 테스트 애플릿 (doPriviligedAction 메소드 제외)으로 축소했지만 더 이상 작동하지 않습니다.

document.socketApplet.testApplet(); 

애플릿은 자체 서명 및 애플릿 내장 :

현재 코드는 내가 같이 자바 스크립트 testApplet()와 같은 메소드에 액세스 할 수있는 업데이트하기 전에

import java.applet.*; 

public class socketApplet extends Applet { 

    public void init() { 
     System.out.println("Applet initialisiert."); 
    } 

    public void start() { 
     System.out.println("Applet gestartet."); 
    } 

    public void paint() { 
     System.out.println("Applet aktualisiert."); 
    } 

    public void stop() { 
     System.out.println("Applet angehalten."); 
    } 

    public void destroy() { 
     System.out.println("Applet beendet."); 
    } 

    public String testApplet() { 
     System.out.println("Applet getestet."); 
     return "Yep, I'm the Applet."; 
    } 

} 

같다 HTML 태그. 그것은 시작 (Java 콘솔 열기 및 초기화, 시작 및 페인트 메서드에서 정의 된 디버그 메시지를 인쇄하는) 있지만 testApplet() 메서드를 액세스 할 수 없습니다. 애플릿이있는 동안 Javascript의 응답은 "정의되지 않음"입니다.

에 대해 (... 몇 일 현재) 새로운 보안 변경 사항을 잠시 읽은 후, 나는 다음과 같은 내용으로 manifest.txt가 추가되었습니다 :

Main-Class: socketApplet 
Permissions: all-permissions 
Codebase: * 
Trusted-Library: true 

또는 신뢰할 수없는 운 -Library 속성.

다시 자바 스크립트를 사용하려면 어떻게해야합니까?

편집 : 구현 : 나는 최신 맥 OS X 머신까지 온 파이어 폭스와 사파리의 최신 버전으로 테스트입니다

<applet id="socketApplet" width="100" height="100" archive="../../socketApplet.jar" name="socketApplet" code="socketApplet" scriptable="true"> 

.

Edit2가 : 내가 만들고이 enter image description here

EDIT3 같은 항아리에 서명하고있다 : 자, 이제 내 병은 몇 번 일 (하지 연속), 내가 enter image description here

를 가지고와 콘솔에서 enter image description here

하지만 대부분의 경우 작동하지 않습니다. 브라우저 다시 시작, 캐시 지우기, 아무 것도 작동하지 않습니다. 이걸 다른 PC에서 다시 테스트 할 겁니다.

Edit4 : 좋아, Windows XP 및 Java 32 비트 7u25가 설치된 가상 머신에서 실행됩니다. 제 64 비트 Mac에서는 30 개 중 1 개만 시도합니다.

+0

? 애플릿을 실행하는 데 사용되는 HTML은 무엇입니까? –

+0

ty 빠른 응답을 위해 메인 포스트를 업데이트했습니다. (끝에있는 편집 섹션 참조) –

+1

권장 사항 : 1) 애플릿을 0이 아닌 너비와 높이로 만듭니다. 웹 페이지의 0x0 요소는 자동으로 의심 스럽기 때문에 브라우저에서 더 높은 수준의 보안을 유발하거나 의심스러운 활동을 찾기 위해 브라우저가 설치 한 도구를 트리거 할 수 있습니다. 2) Javascript에서 애플릿을 호출 할 수 있음을 나타 내기 위해'scriptable = "true"'속성을 추가하십시오. –

답변

1

좋아 내가 그것을 애플릿과는 아무런 관련이없는 모든 악의 근원 ...

을 발견했다. 혼란스러운 상황은 그것이 파이어 폭스에서 윈도우즈가 아닌 맥 (동일한 FF 버전, 같은 자바 버전)에서 파이어 폭스에서 일한 것이었다. 내 Mac에서 Safari는 플러그인이 비활성화 되었기 때문에 작동하지 않았습니다 ...

그래서 Mac의 Firefox에서만 문제가 발생했습니다. 위의 애플릿 코드를 html 페이지에 작성할 때 다른 상황을 테스트하고 애플릿이 작동했습니다.전에는 애플릿을 동적으로 만들었습니다 (소프트웨어에서 필요한 것) :

var applet = document.createElement('applet'); 

    applet.archive  = 'socketApplet.jar'; 
    applet.id   = 'socketApplet'; 
    applet.name   = 'socketApplet'; 
    applet.code   = 'socketApplet'; 
    applet.scriptable = 'true'; 
    applet.width  = '0'; 
    applet.height  = '0'; 

    document.body.appendChild(applet); 

Mac에서는 Firefox가 아닌 모든 곳에서 작동합니다. 그래서 해결 방법으로 애플릿을 iframe에 임베드해야하고 iframe을 동적으로 임베드해야합니다. 그게 내가 IE 지원 object 및 embed 태그에 HTML 태그를 변경하기 위하여려고하고있다

var mFrame  = document.createElement('iframe'); 
    mFrame.id  = 'testFrame'; 
    mFrame.height = '200'; 
    mFrame.width = '400'; 
    document.body.appendChild(mFrame); 
    mFrame.src  = 'frame.html'; // contains the applet code 

다음 ... 작동합니다. 도와 줘서 고마워 앤드류 톰슨!

자바 스크립트를 통해 애플릿에 액세스하는 것이 더 복잡하기 때문에 iframe 버전을 싫어하지만 다른 방법은없는 것처럼 보입니다.

나는 이것을 위해 모질라 버그 티켓을 제출할 것입니다. 이 하나를 제외한 다른 상황에 어쩌면 유사한 https://bugzilla.mozilla.org/show_bug.cgi?id=912880

: https://bugzilla.mozilla.org/show_bug.cgi?id=872969

에서 테스트 무엇 브라우저의 버전은 무엇
+0

업데이트 : 그들은 "WONTFIX"로 버그 티켓을 폐쇄 - https://bugzilla.mozilla.org/show_bug.cgi?id=912880#c9 –

관련 문제