2017-08-13 1 views
0

Alors que je développais une application sur le nom de code One sur le simulateur, j'ai fait face à un problème étrange.Comportement étrange du composant Code-Name-One Browser Dans le simulateur

j'ai un Tabs avec un seul Tab, cet onglet a un browserComponent avec un contenu HTML. Il a span élément qui appelle un événement fonction JavaScript onclick, cette fonction JavaScript appelle une méthode Java qui crée un nouveau Tab et l'ajouter au Tabs.

Tout à ce moment va bien, mais le BrowserComponent commence à charger la page d'accueil CodeNameONe par lui-même sans aucune instruction de ma part, donc je me demandais si c'est un bug ou quoi. J'utilise NetBeans 8.2 avec la dernière version de CodeNameOne.

NOTE J'ai appelé une méthode Java de la fonction JS dans un autre exemple avec le Tabs et le navigateur ne se charge pas des pages externes donc je pense est lié à Tabs plus que toute autre chose.

NOTE Je suis sûr qu'aucun problème lié au code, mais je l'ai posté après avoir été conseillé de le faire.

Ceci est la fonction JavaScript:

function openMessageFaceJS() 
    { 
     window.openMessageFace();     
    } 

et c'est la méthode Java

this.context.getWindow().//context is a JSObject 
      set("openMessageFace", (JSFunction) (who, are_you) -> 
      { 
       manager.openMessageFace(); 
       //look blow to see this method openMessageFace(); 
      }); 

Et dans une autre classe le code de la méthode réelle

public void openMessageFace() 
{ 
    //this operation is performed successfuly 
    Component component = create1(); 

    tabs.addTab("what (:", component); 
    sendMessageFacePosotiin = tabs.getTabCount() - 1; 
    tabs.setSelectedIndex(sendMessageFacePosotiin, true); 
} 
+0

Et comment faire exactement que vous attendez quelqu'un pour aider si nous ne pouvons pas voir le code réel? –

+0

@JimGarrison merci pour intéressant je n'ai pas téléchargé le code pour deux raisons ** 1) ** le code est trop long distribué entre plusieurs classes ** 2) ** quand j'appelle la méthode 'Java' de la fonction' JS' cela a bien fonctionné mais pas dans les 'Tabs' donc je ne pense pas qu'il a une relation avec le code – Anas

+0

Pouvez-vous arrêter d'utiliser le formatage de code s'il vous plaît? C'est pour le code réel, pas pour les noms des langages de programmation. – bcsb1001

Répondre

1

Vous appelez le rappel avant que la page ne soit chargée, le "pont" n'a pas encore été complètement configuré. La chose la plus sûre à faire est de placer tous vos trucs JS à l'intérieur de l'événement web onLoad pour garantir que l'installation est terminée.


BrowserComponent bc = new BrowserComponent(); 
bc.addWebEventListener("onLoad", e->{ 
    JavascriptContext ctx = new JavascriptContext(bc); 
    ... etc.... 
}); 

Cela dit, je l'ai fait un petit correctif qui devrait se prémunir contre ce problème here

Il sera disponible dans la prochaine mise à jour de la bibliothèque (vendredi je crois)

+0

Merci @steve pour intéressant mais la méthode de rappel "Java" est appelée avec succès donc la page est complètement chargée avec succès et aussi quand est utilisé le code que vous avez posté le problème encore , ** le problème ** est littéralement "Après le rappel de la méthode Java est appelée avec succès le navigateur charge une page par elle-même cette page est codename une page d'accueil – Anas

+0

Je suggère également de créer une file d'attente pour les scripts qui est t ried pour être exécuté avant que la page ne soit complètement chargée et quand elle est chargée avec succès, nous les exécutons séquentiellement - (: – Anas

+0

Steve, est-il possible que ce soit un effet secondaire de ce commit? https://github.com/codenameone/CodenameOne/commit/ce5bbd28e5e1bc297f292ccf30e550de08810250 –