将值从Java传递到Javascript

时间:2018-10-16 06:06:41

标签: javascript java android-studio

我正在使用webview制作一个Android应用。 该应用程序可以打印出收据。我想做的是当打印机不工作时,出现警告框,告诉打印机不工作,并向表单的onsubmit事件返回false,以防止提交表单。

Java代码:

public class JSKicker {

    @JavascriptInterface
    public void callPrint(final String argumet) {
        Thread thread = new Thread(new Runnable() {
            public void run() {

                int nRtn;
                connectionNum = myPrinter.Connect("000.000.0.000");

                if(connectionNum < 0){ //Printer not working

                 webview.post(new Runnable() {
                        @Override
                        public void run() {
                            String script = "alert('Printer Error'); return printer_connection = false;";
                            webview.evaluateJavascript(script, new ValueCallback<String>() {
                                @Override
                                // I can't figure out what to do here...
                            });
                        }
                    });

                }else{ //Printer is working properly
                    connectionNum = myPrinter.SetLocale(8);
                    strText = argument;
                    nRtn = myPrinter.PrintText(strText, "SJIS");

                    nRtn = myPrinter.PaperFeed(64);
                    nRtn = myPrinter.CutPaper(1);

                    myPrinter.Disconnect();
                }
            }
        });
        thread.start();
    }

标头中的JavaScript:

<script type="text/javascript">
    function gate(){
        jQuery.ajax({
                    url:'/cart_info.php',
                    type:'GET'
                })
                .done( (data) => {
                    window.JSKicker.callPrint(data);
                })

                if (printer_connection = false) {
                    return false;
                }else{
                    return true;
                }
    }

</script>

HTML表单标签:

<form method="post" id="order_form" onsubmit="return gate();">

我如何获得这项工作?

3 个答案:

答案 0 :(得分:0)

您可以通过WebView.evaluateJavascript()吗?

https://developer.android.com/reference/android/webkit/WebView.html#evaluateJavascript(java.lang.String,%20android.webkit.ValueCallback%3Cjava.lang.String%3E)

因此,您可以将简单的CustomEvent发送到WebView中的文档

(1,0)

(1,0)

(1,0)

(1,0)

并且在JavaScript中,您可以挂接侦听器以对您的自定义事件做出反应。

webView.evaluateJavascript("document.dispatchEvent(new Event('printer_error', { details: "No printer found!" }));");

没有对此进行测试,因此至少evaluateJavascript()需要回调函数。

答案 1 :(得分:0)

WebSocket可以解决您的问题。

WebSockets在客户端和服务器之间提供持久的连接,双方都可以使用该连接随时开始发送数据。客户端通过称为WebSocket握手的过程建立WebSocket连接。

它非常简单并且易于实现。

您可以点击引荐链接以获取更多详细信息:-

JAVA WebSocket:-WebSocket using Spring BootWebSocket using Simple JEE

浏览器WebSocket(JavaScript):-WebSocket API

答案 2 :(得分:0)

在Android中,如果您希望webview将值传递给JavaScript。 首先,您需要将webview设置为启用JavaScript,

    private WebView mWebView;

    void onCreate(){
    mWebView = findViewById(R.id.webview);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportZoom(false);
    }

然后,在您想要做的事情代码中

if(connectionNum < 0){ //Printer not working
// I need to do something here to send a message that the printer isn't working to JS.
//In thread can not use mWebView,should send message to MainThread to do
     // mWebView.loadUrl("javascript:javaCall()");
        Message msg = new Message();
        msg.what = 1;
        myHandler.sendMessage(msg);
    //myHandler can be your MainThread send to here
}

在代码中创建的mWebView所在的主线程中,您可以使用 处理发送到此处的消息的处理程序。

private Handler myHandler = new Handler() {
  @Override 
    public void handleMessage(Message msg) { 
      // this 1 is just thread send to here
      if (msg.what == 1) {
         //and here can do the webview UI method
         mWebView.loadUrl("javascript:javaCall()");
      }
  }

};

javaCall()是JacaScript调用方法的地方,在javaScript中,您可以这样写:

<script language="javascript">  
function javaCall(){  
    alert("Printer Error");
    //other thing you can do
}  
</script>  

如果有问题,可以参考正式文件。

public void loadUrl (String url)
Loads the given URL.
Also see compatibility note on evaluateJavascript(String, ValueCallback).

webview use link