2

私はこのコードを使用していますが、値が「未定義」であると誰かが私に問題を指摘できますか?

これは私のJavaクラスコードです

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(com.frux.web.R.layout.activity_main);
    String value = "Isiah";
    WebView web = (WebView) findViewById(R.id.web1);
    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("file:///android_asset/www/index.html");
    web.loadUrl("javascript:setValue(\""+ value +"\")");


}

これは私のウェブページコードです

<!DOCTYPE html>
<html>
<head>
</head>
<body>

Whats your Name?
<input id="name" value="" />
<button onclick = "setValue()">Submit</button>

<script type="text/javascript"> 
function setValue(value){
var myValue = value;
document.getElementById("name").value = myValue;

}
</script>
</body>
</html>

これもやってみます

web.loadUrl("javascript:setValue('"+ value +"')");

どんな考えでも高く評価されます

私はこのHTMLコードのコードを使用しましたが、上記の他のコードとは異なり、何も表示されません。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>


<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript">  

function setValue(amount1)
{
    myValue = amount1;
    document.getElementById("amount").value = myValue;
  }

function rand ( n )
{
    document.getElementById("orderRefId").value =  ( Math.floor ( Math.random ( ) * n + 1 ) );
}



</script>
</head>
<body onLoad="rand(200000);setValue();">
        <!-- 
            Note: https://www.pesopay.com/b2c2/eng/payment/payForm.jsp for live payment URL
                  https://test.pesopay.com/b2cDemo/eng/payment/payForm.jsp for test payment URL
        -->
        <form method="POST" name="frmPayment" action="https://test.pesopay.com/b2cDemo/eng/payment/payForm.jsp">
        <table>
        <tbody>
        <tr>
            <td>Order Reference No. (your reference number for every transaction that has transpired):</td> 
            <td><input type="text" id="orderRefId" name="orderRef" value="Test-001"/></td>
        </tr>   
        <tr>
            <td>Amount:</td>
            <td><input type="text" name="amount" id="amount" value=""/></td>

        </tr>
        <tr>
            <td>Currency Code - "608" for Philippine Peso, "840" for US Dollar:</td>
            <td><input type="text" name="currCode" value="608"/></td>
        </tr>   
        <tr>
            <td>Language:</td>
            <td><input type="text" name="lang" value="E"/></td>
        </tr>   
        <tr>
            <td>Merchant ID (the merchant identification number that was issued to you - merchant IDs between test account and live account are not the same):</td> 
            <td><input type="text" name="merchantId" value="18056869"/></td>
        </tr>
        <tr>    
            <td>Redirect to a URL upon failed transaction:</td>
            <td><input type="text" name="failUrl" value="http://www.yahoo.com?flag=failed"/></td>
        </tr>   
        <tr>
            <td>Redirect to a URL upon successful transaction:</td>
            <td><input type="text" name="successUrl" value="http://www.google.com?flag=success"/></td>
        </tr>
        <tr>
            <td>Redirect to a URL upon canceled transaction:</td>
            <td><input type="text" name="cancelUrl" value="http://www.altavista.com?flag=cancel"/></td>
        </tr>
        <tr>
            <td>Type of payment (normal sales or authorized i.e. hold payment):</td> 
            <td><input type="text" name="payType" value="N"/></td>
        </tr>
        <tr>    
            <td>Payment Method - Change to "ALL" for all the activated payment methods in the account, Change to "BancNet" for BancNet debit card payments only, Change to "GCASH" for GCash mobile payments only, Change to "CC" for credit card payments only:</td>
            <td><input type="text" name="payMethod" value="ALL"/></td>
        </tr>
        <tr>    
            <td>Remark:</td>
            <td><input type="text" name="remark" value="Asiapay Test"/></td>
        </tr>
        <!--<tr>    
            <td>Redirect:</td>
            <td><input type="text" name="redirect" value="1"/></td>
        </tr>-->
        <tr>
            <td></td>
        </tr>   

        <input type="submit" value="Submit">




        </tbody>
        </table>    


        </form>

</body>
</html>             
4

4 に答える 4

1

渡された値を二重引用符で囲みます。

web.loadUrl("javascript:setValue(\""+value+"\")");

私はこれを得た!2回目に呼び出すloadUrlときは、ページがまだ読み込まれていません。解決策は、イベントへのsetValue呼び出しを添付することです。window.onload

super.loadUrl("javascript:window.onload = function(){setValue(\"haha\");};");

このコードは、「haha」を入力に正しくロードします。

于 2012-08-02T09:45:13.083 に答える
0

このように値を一重引用符で囲んでみてください

 web.loadUrl("javascript:setValue('"+ value +"')");
于 2012-08-02T09:40:03.950 に答える
0

準備が整う前にDOMにアクセスしようとしたときに、この問題が発生しました。devmilles.comのソリューションは機能しましたが、実験にもう少し時間を費やしました。

両方の

webView.loadUrl("javascript:window.addEventListener('DOMContentLoaded',
    function(){setValue('haha');}, false);");

webView.loadUrl("javascript:window.addEventListener('load',
    function(){setValue('haha');}, false);");

私のために働いたが、document代わりにイベントを添付することはwindowしなかった。DOMContentLoaded、サポートされている場合、。よりもわずかに速く応答しますload

さらに、WebViewClient常にイベントがあり、イベントonPageFinished()のように機能しているように見えます。load

webView.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:setValue('haha');");
    }
});

最後に、次のように動作をエミュレートできます

webView.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
        if (progress == 100) {
            view.loadUrl("javascript:setValue('haha');");
        }
    }
});

しかし、アプローチ全体でそれを使用する理由はわかりませんWebViewClient(同等である場合とそうでない場合があります)。

于 2014-12-18T11:08:14.953 に答える
0

私も同じ問題に直面していますが、以下の方法で問題を解決できます。

     String testValue="abcdedfg";
    String value = "\'"+testValue+"\'";
    web.loadUrl("javascript:setValue(\""+value+"\")");
于 2016-04-14T05:47:00.263 に答える