2010-12-14 21 views
1

Ich benutze ein WebView mit einer JavaScript-Schnittstelle. Alles, was ich tun möchte, ist das Ändern der inneren HTML eines Spanes, wenn einige Checkboxen markiert sind.Kann Javascript innerHtml nicht mit WebView arbeiten

Unten ist ein Ausschnitt eines Strings, den ich in strings.xml habe. Das Formular ruft diese Funktion onSubmit auf und sollte nicht fortgesetzt werden, wenn es nicht übergeben wird. Das Problem ist, dass ich den inneren HTML nicht arbeiten kann (wird jedes Mal wahr zurückgegeben).

Dies funktioniert

<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> 

Dies gibt true zurück, jedes Mal

<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> 

Dies ist die Spanne in den Körper des Dokuments

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

Was mache ich falsch?

+2

Alle Sie Grund sind Backslash-escaping Anführungszeichen? Ansonsten ist dies kein Standard HTML/Javascript. – slebetman

+0

Was ist der Code für 'checkboxPass'? Wenn es ein Objekt oder einen String zurückgibt, wird das 'if (pass)' immer als wahr ausgewertet. Zum Beispiel wird 'if (" false ")' so weit wie ich weiß als wahr gewertet. Es wird nur falsch sein, wenn checkboxPass false, null oder undefined zurückgibt. – tjameson

+0

@tjameson javaInterface.checkboxPass() gibt einen booleschen Wert – jax

Antwort

0

Ich kann nicht sagen, warum der Code sich nicht so verhält, wie Sie es wollen, aber ich kann sagen, dass Sie versuchen, dies in einer Weise zu kompliziert zu tun. Das Speichern von JavaScript und HTML in einer XML-Datei scheint eine echte schlechte Idee zu sein. Ich denke, es ist legales JavaScript, aber die Benennung einer Variablen, die der ihrer Elternfunktion entspricht, scheint einfach falsch zu sein. Im Allgemeinen sollten Sie solche Feinheiten nicht verwenden, sie sind nur für die Verschleierung geeignet.

+0

Ich habe den Variablennamen in "passed" geändert, habe aber immer noch das gleiche Problem – jax

+0

Ich müsste eine vollständigere Ansicht Ihres Codes sehen, am liebsten würde ich ihn auf einem Server gehostet sehen. – aaaaaaaaaaaa

0

Ich denke immer noch, dass Ihre Methode etwas zurückgibt, das nicht unbedingt ein boolescher Wert ist. Ich würde versuchen, so etwas wie dies zu tun:

<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> 

Dies wird die Möglichkeit des „boolean“ auszuschließen in Anführungszeichen oder etwas anderes lahm gewickelt wird. Wenn dies wirklich eine Java-Schnittstelle ist, wird wahrscheinlich der boolesche Wert in eine Zeichenkette umgewandelt.

Ich glaube nicht, dass Booleans als echte boolesche Werte übergeben werden können, zumal Javascript und Java unter der Haube anders arbeiten. Sie könnten eval verwenden, aber es ist keine gute Übung, denn wenn es eine Funktion wäre, würde sie es ausführen.

IE haben keine Parsing-Funktion, so dass Sie diese verwenden müssen:

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