2010-12-14 3 views
1

J'utilise un WebView avec une interface javaScript. Tout ce que je veux faire est de changer le html interne d'un span si certaines cases sont cochées. Ci-dessous un extrait d'une chaîne que j'ai dans strings.xml. Le formulaire appellera cette fonction onSubmit et ne devrait pas continuer s'il ne passe pas. Le problème est que je ne peux pas faire fonctionner le innerHtml (retourne true à chaque fois).Impossible d'obtenir javascript innerHtml pour travailler sur WebView

Cela fonctionne

<script type=\"text/javascript\" language=\"javascript\"> 
    function pass() { 
     return javaInterface.checkboxPass(); 
     /* 
     if(passed) { 
      //change the instructions 
      document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\'; 
     } 

     return passed; 
     */ 
    } 
</script> 

Cela retourne vrai chaque fois que

<script type=\"text/javascript\" language=\"javascript\"> 
    function pass() { 
     var passed= javaInterface.checkboxPass(); 

     if(passed) { 
      //change the instructions 
      document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\'; 
     } 

     return passed; 

    } 
</script> 

Ceci est la durée dans le corps du document

<span id=\"txtInstructions\">%1$s</span> 

Qu'est-ce que je fais mal?

+2

Toute raison pour laquelle vous guillemets backslash-escaping? Sinon, ce n'est pas du HTML/javascript standard. – slebetman

+0

Quel est le code de 'checkboxPass'? Si elle renvoie un objet ou une chaîne, le 'if (pass)' sera toujours évalué à true. Par exemple, 'if (" false ")' sera évalué à vrai autant que je sache. Cela ne sera vrai que si checkboxPass retourne false, null ou undefined. – tjameson

+0

@tjameson javaInterface.checkboxPass() renvoie un booléen – jax

Répondre

0

Je ne peux pas dire pourquoi le code ne se comporte pas comme vous le voulez, mais je peux dire que vous essayez de le faire d'une manière trop compliquée. Stocker votre JavaScript et HTML dans un fichier XML semble être une véritable mauvaise idée. Je suppose que c'est du JavaScript légal, mais nommer une variable de la même façon que sa fonction parente semble faux, en général, vous ne devriez pas utiliser de telles subtilités d'étendue, c'est bon pour rien d'autre que l'obscurcissement.

+0

J'ai changé le nom de la variable à passer mais j'ai toujours le même problème – jax

+0

Je devrais voir une vue plus complète de votre code, de préférence je voudrais le voir hébergé sur un serveur. – aaaaaaaaaaaa

0

Je pense toujours que votre méthode retourne quelque chose qui n'est pas strictement un booléen. Je voudrais essayer de faire quelque chose comme ceci:

<script type="text/javascript" language="javascript"> 
function pass() { 
    var passed= javaInterface.checkboxPass(); 

    if(JSON.parse(passed)) { 
     //change the instructions 
     document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\'; 
    } 

    return passed; 

} 
</script> 

Cela évitera donc la possibilité de « booléenne » étant enveloppé entre guillemets ou quelque chose d'autre boiteux. Si c'est vraiment une interface Java, c'est probablement la conversion du booléen en chaîne.

Je ne pense pas que les booléens puissent être transmis comme de vraies valeurs booléennes, d'autant plus que javascript et java fonctionnent différemment sous le capot. Vous pouvez utiliser eval, mais ce n'est pas une bonne pratique parce que si c'était une fonction, elle fonctionnerait.

IE ne dispose pas d'une fonction d'analyse syntaxique, de sorte que vous devrez utiliser:

https://github.com/douglascrockford/JSON-js

Questions connexes