IT干货网

android - WebView 阻止弹出窗口

itcoder 2023年05月26日 编程设计 5 0

我正在使用 WebView 浏览 pesopay.com,它工作正常,除非我按下提交按钮。使用 Google Chrome 等互联网浏览器将显示一个弹出窗口,确认您填写的信息。但是在我的 Android WebView 中,当我按下提交按钮时没有任何反应。我认为是因为未启用 WebView 来显示弹出窗口。

谁能指出我哪里出了问题?

这是我的 Activity :

public class PaymentActivity extends Activity { 
 
String amount1;      
    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        // TODO Auto-generated method stub 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.payment); 
 
         Bundle extras = getIntent().getExtras();  
            if(extras !=null) 
            { 
                amount1 = extras.getString("amount1"); 
 
            } 
 
        WebView web = (WebView) findViewById(R.id.web1); 
        web.getSettings().setJavaScriptEnabled(true); 
        web.loadUrl("javascript:window.onload = function(){setValue(\""+ amount1 +"\");};"); 
        web.loadUrl("file:///android_asset/www/index.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; 
 
    } 
</script> 
<script type="text/javascript">   
    function rand ( n ) 
    { 
        document.getElementById("orderRefId").value =  ( Math.floor ( Math.random ( ) * n + 1 ) ); 
    } 
</script> 
</head> 
 
<body onLoad="rand(200000)"> 
        <!--  
            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> 

请您参考如下方法:

如果我没看错,您需要使用 JavaScriptInterface 从 Android 调用 JavaScript 函数。

检查此链接可能对您有帮助:

http://www.codeproject.com/Articles/392603/Android-addJavaScriptInterface

或者检查一些网络设置: http://developer.android.com/reference/android/webkit/WebSettings.html#setSupportMultipleWindows%28boolean

尝试将此代码放在 onCreate() 中

        webView.getSettings().setPluginsEnabled(true); 
        webView.getSettings().setAllowFileAccess(true); 
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java - 如何在android中的数据库上更改数据时得到通知