【问题标题】:Get value from input in android webview从android webview中的输入中获取值
【发布时间】:2020-07-30 09:18:39
【问题描述】:

所以我尝试将输入类型的值转换为我的 android webview 中的字符串。但我找不到办法。以下是我在 html 中的代码。

<input class="input100"  type="hidden" id="captcha1" name="captcha1" value="<?php echo $_SESSION['captcha']; ?>">

我想获取该值并将其存储到我的 android webview 中的字符串中。有什么线索吗??

【问题讨论】:

  • 你想在什么时候获取这些值?用户必须采取什么行动?
  • 一加载网址,我就想获取值。

标签: javascript java android html webview


【解决方案1】:

您必须向 webview 注册 javascript 接口。您可以将带有注释 @JavascriptInterface 的方法添加到可以从 Webview 控件调用的 android webview 控制器中。也不要伪造从proguard中删除那些...... 更多信息How to get return value from javascript in WebView of Android? 此示例将从 html 文本中读取并放入 android 文本视图。 在将 android 方法暴露给 webview java 脚本时,您应该始终小心

import android.content.Context
import android.util.Log
import android.webkit.JavascriptInterface
import android.webkit.WebView
import android.widget.TextView

class MyWebView(context:Context, textView: TextView) {
var outValue:String =""
val myWebView = WebView(context)
val html: String by lazy{"<!DOCTYPE html><head><title>Loading...</title></head><body>"+
        "<input  type=\"text\" id=\"captcha1\" name=\"captcha1\" onkeyup=\"fromAndroid.getData(value);\">"+
        "<img src= /></body></html>"}

init {
    val javaScriptInterface = object: JavaScriptInterface{
        @JavascriptInterface
        override fun getData(data: String){
            outValue = data
            textView.text = data
            Log.d(TAG, data)
        }
    }
    myWebView.settings.setJavaScriptEnabled(true)
    myWebView.addJavascriptInterface(javaScriptInterface, "fromAndroid")
    myWebView.loadDataWithBaseURL("", html, "text/html","UTF-8", null);
}
companion object{
    const val TAG = "MyWebView"
}
}

interface JavaScriptInterface{
  fun getData(data: String)
}

【讨论】:

    【解决方案2】:

    你可以在你的代码中使用类似的东西,来自 javascript 的函数必须返回该值,然后它将被捕获如下:

    override fun onCreate(savedInstanceState: Bundle?) {
            // webView referenced from layout id
            webView.settings.javaScriptEnabled = true
            webView.webViewClient = MyWebViewClient()
            webView.setWebChromeClient(MyWebChromeClient())
            webView.loadUrl("http://foobar.com")
        }
        
        private class MyWebViewClient : WebViewClient() {
            override fun onPageFinished(view: WebView, url: String) {
                //functionToReturnSomething() should be \ same as you mention in javascript
                view.loadUrl("javascript:alert(functionToReturnSomething())")
            }
    
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                return false
            }
        }
        
        private class MyWebChromeClient : WebChromeClient() {
            override fun onJsAlert(view: WebView, url: String, message: String, result: JsResult): Boolean {
                result.confirm()
                return true
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多