2010-12-14 15 views
1

WebViewをjavaScriptインターフェイスで使用しています。私がしたいのは、いくつかのチェックボックスにチェックが入っていれば、スパンの内側のhtmlを変更するだけです。WebViewでjavascriptのinnerHtmlを動作させることができません

以下は、strings.xmlにある文字列のスニペットです。フォームはこの関数をOnSubmitと呼び、渡されない場合は続行しないでください。問題は、innerHtmlを動作させることができないことです(毎回trueを返します)。

この作品

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

これが本当毎回

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

これは私が間違っているのは何の文書

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

の体内のスパンで返しますか?

+2

何らかの理由であなただバックスラッシュエスケープ引用符文字を?それ以外の場合、これは標準的なHTML/javascriptではありません。 – slebetman

+0

'checkboxPass'のコードは何ですか?オブジェクトまたは文字列を返す場合、 'if(pass)'は常にtrueに評価されます。例えば、 'if(" false ")'は私が知る限り真と評価します。 checkboxPassがfalse、null、またはundefinedを返す場合にのみ、falseになります。 – tjameson

+0

@tjameson javaInterface.checkboxPass()は、XML文字列ファイルに格納されているため、ブール値 – jax

答えて

0

コードがあなたの望むように動作しない理由はわかりませんが、私はあなたが複雑すぎる方法でこれをやろうとしていることが分かります。 JavaScriptとHTMLをXMLファイルに保存することは、本物の悪い考えです。私は正当なJavaScriptだと思いますが、親関数と同じ変数を指定するのは間違っているようですが、一般的にこのようなスコープの微妙な部分を使用すべきではありません。

+0

変数名をpassedに変更しましたが、同じ問題が残っています – jax

+0

コードの完全なビューを表示する必要があります。サーバーでホストされていることを確認してください。 – aaaaaaaaaaaa

0

私はまだあなたのメソッドが厳密にはブール値ではないものを返すと思います。

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

これは、 "ブール値"が引用符で囲まれているか、または他の何らかの形でラップされている可能性を排除します。これが本当にJavaインターフェースであれば、ブール値を文字列に変換している可能性があります。

ブール値は実際のブール値として渡すことはできません。特にjavascriptとjavaは異なる方法で動作するためです。あなたはevalを使うことができますが、それが関数であれば実行するため、良い方法ではありません。

IEは、解析機能を持っていないので、あなたはこれを使用する必要があります:

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

関連する問題