2009-12-09 12 views
0

Je reçois l'exception Accès refusé lorsque j'appelle une fonction de script Java de l'applet Java uniquement dans IE. (Modifié ma question d'origine des informations à jour.)L'accès est refusé Exception lors de l'appel de la fonction JavaScript de Java dans IE

Voici mon code HTML

<script type="text/javascript"> 
    function uploadComplete() { 
     alert("in Upload Complete"); 
     ju.doneUpload(true); 
    } 
</script> 

ju est déclarée globalement dans la même page qui appelle la doneUpload à partir d'un fichier JavaScript différent. J'ai inclus MAYSCRIPT dans mon applet Tag.

du code Java [Après avoir ajouté AccessController]:

AccessController.doPrivileged(new PrivilegedAction<Object>() { 
public Object run() { 

JSObject scriptObject = getScriptObject(uploadDialogBox.applet); 
if(scriptObject != null) { 
    try { 
     // this is the call where it throws an exception 
     **scriptObject.call("uploadComplete", null);** 
    } catch(JSException e) { 
     System.out.println("exception " + e.getMessage() 
      + " WrappendException " + e.getWrappedException() 
      + " stack trace " + e.getStackTrace()); 
    } 
} 
return null; 
} 

});

private JSObject getScriptObject(JApplet appletInstance) { 
    JSObject result = null; 
    // JSObject doc = null; 
    try { 
     result = JSObject.getWindow(appletInstance); 
     // doc = (JSObject) result.getMember("document"); 
    } catch (JSException e) { 
     System.out.println("Exception in getScriptObject : " + e.getMessage() 
      + " Wrappend exception " + e.getWrappedException()); 
    } 
    return result; 
} 

Il jette un JSException: Access is denied

La fonction alert dans uploadComplete est pas appelé. Qu'est-ce que je fais mal ici?

+0

il est difficile de lire ce qui est le code ici et quel est votre texte ... vous pouvez utiliser StackOverFlow.com syntaxe s'il vous plaît lors de la représentation du code? (placer 4 espaces devant chaque ligne de code le place dans une zone de code) – Jrud

+0

J'ai formaté le code pour générer une meilleure réponse. – BalusC

+0

bien ... il peut ne pas obtenir de "meilleures" réponses ... mais au moins c'est correctement formaté maintenant. – Jrud

Répondre

1

Est-ce que this aide?

Un résumé de cette réponse sur le forum Sun:

Bonjour, j'ai eu le même problème. Je l'ai résolu, vous avez juste besoin de mettre en œuvre les applets méthode comme ceci:

public void f() { 
    AccessController.doPrivileged(new PrivilegedAction<Object>() { 
     public Object run() { 
     // do something 
     return null; 
     } 
    }); 
} 

Le seul problème avec cette approche est que lorsque vous appelez la méthode pour la première fois, il faut assez de temps pour répondre (4-5s) et chaque fois, la réponse est immédiate.

Modifier: OK, une deuxième solution possible consiste à utiliser getDocument() comme décrit dans this article. Un mot d'avertissement, dans nos tests, nous avons vu que ce n'est pas toujours fiable sur Firefox sur le Mac. L'essence de cette méthode est de faire:

getAppletContext().showDocument(new URL("javascript:uploadComplete()")); 
+0

Cela ne m'aide toujours pas ... J'ai enveloppé AccessController sur mon code et toujours obtenir l'exception Accès refusé. Dois-je vérifier applet.policy ou crossdomain.xml? – Susmita

+0

J'avais showDocumnet avant URL url = nouvelle URL ("javascript: uploadComplete()"); uploadDialogBox.applet.getAppletContext(). showDocument (url, "_self"); mais cela ne fonctionne pas dans IE mais fonctionne dans FF. Alors essayait de vivre comme une alternative. – Susmita

+0

En fait, après avoir enveloppé mon code sur AccessController, il fonctionne en FF mais pas pour IE. Cela revient donc à un problème de navigateur? Il donne le "Accès refusé". quand scriptObject.call ("uploadComplete", null); est appelée. – Susmita