javascript - 是否可以将登录信息从 webview 传递到 android Activity?

标签 javascript android webview fingerprint

我有一个网站,它通过 webview 加载到 android 应用程序中。每当应用程序启动时,启动屏幕后将加载 Web View 并出现登录页面(在 Web View 中),该页面包含两个文本框,一个用于用户名,另一个用于密码。成功登录后, session 启动并且网页加载良好。 现在我想将登录信息(即用户名和密码)从该登录页面(显示在 web View 中)获取到我的 android Activity 中。

获取此登录信息的原因: 实际上,我想获取这些值,因为我需要添加指纹身份验证选项以及用户名和密码。我想为用户提供两个选项,即使用用户名/密码登录或使用指纹登录。

我怎样才能实现这种情况?据我所知,不可能通过 webview 向用户提供这两个选项,因为只有 native Android 应用程序才能实现这种情况。所以请指导我。

我尝试了很多解决方案,但都没有成功。


public class PrimeLedgeWeb extends AppCompatActivity {

    WebView webView;
    String imei,url;
    boolean isConnected;
    WP10ProgressBar progressBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prime_ledge_web);

                                        webView=(WebView)findViewById(R.id.webViewPrime);

        progressBar = (WP10ProgressBar) findViewById(R.id.wp7progressBar);
        progressBar.showProgressBar();
        webView.setWebViewClient(new CustomWebViewClient());

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);

                                        if (Connection.checkConnection(getApplicationContext()))
                                        {
                                            initGUI();
                                        }
                                        else {
                                            Toast.makeText(PrimeLedgeWeb.this, "Make sure to connect to Internet before proceeding!", Toast.LENGTH_SHORT).show();
                                        }

                                    }

                                    public void initGUI() {
                                        TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
                                        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                                            ActivityCompat.requestPermissions( this, new String[] {  android.Manifest.permission.READ_PHONE_STATE  }, 0);
                                        }
                                        else {
                                            imei = TelephonyMgr.getDeviceId();
                                        }


                                        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
                                        PrimeLedgeWeb.NetworkChangeReceiver receiver = new PrimeLedgeWeb.NetworkChangeReceiver();
                                        registerReceiver(receiver, filter);


                                        NetworkDetaction networkDetaction = new NetworkDetaction(this);
                                        if (networkDetaction.isNetworkConnected()) {
                                            final URLRequest urlRequest = new URLRequest(PrimeLedgeWeb.this);

                                            if (urlRequest.url==null)
                                            {
//                                                url = "http://204.93.216.33/PrimeTex/";
                                                url = "http://204.93.216.33/PrimeTex/Home/DeviceId?DevId=" + imei;

                                                if (new NetworkDetaction(PrimeLedgeWeb.this).isNetworkConnected()) {
                                                    if (urlRequest.url == null) {
                                                        webView.loadUrl(url);

                                                        webView.getSettings().setLoadsImagesAutomatically(true);
                                                        webView.getSettings().setJavaScriptEnabled(true);
                                                        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

                                                        webView.setWebViewClient(new WebViewClient(){
                                                            @Override
                                                            public boolean shouldOverrideUrlLoading(WebView view, String Url) {
                                                                if (Url != url) {
                                                                    webView.loadUrl(Url);
                                                                }
                                                                return true;
                                                            }

                                                            @Override
                                                            public void onPageStarted(WebView view, String url, Bitmap favicon) {

                                                                webView.setVisibility(webView.INVISIBLE);
                                                            }

                                                            @Override
                                                            public void onPageFinished(final WebView view, String Url) {

                                                                progressBar.postDelayed(new Runnable() {
                                                                    @Override
                                                                    public void run() {
                                                                        progressBar.setVisibility(View.GONE);
                                                                       // progressBar.hideProgressBar();
                                                                    }
                                                                }, 1000);

                                                                webView.postDelayed(new Runnable() {
                                                                    @Override
                                                                    public void run() {
                                                                        view.setVisibility(webView.VISIBLE);
                                                                    }
                                                                }, 1000);


                                                                super.onPageFinished(view, Url);
                                                                if (!new NetworkDetaction(PrimeLedgeWeb.this).isNetworkConnected()) {
                                                                    if (!Url.endsWith("loginui.aspx")) {
                                                                        webView.setVisibility(View.GONE);
                                        Toast.makeText(PrimeLedgeWeb.this, "Not connected to internet",
                                                Toast.LENGTH_SHORT).show();
                                    }
                                    else
                                        {
                                        webView.setVisibility(View.GONE);
                                    }
                                }
                                                                if (new NetworkDetaction(PrimeLedgeWeb.this).isNetworkConnected()) {
                                                                    webView.postDelayed(new Runnable() {
                                                                        @Override
                                                                        public void run() {
                                                                            webView.setVisibility(View.VISIBLE);
                                                                        }
                                                                    }, 1000);
                                                                }
                            }
                        });
                    }
                }
            }

        }
        else
            {
            Toast.makeText(this, "Check Network Connection", Toast.LENGTH_SHORT).show();
        }
    }

    private class CustomWebViewClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView webview, String url, Bitmap favicon) {
//            progressBar.showProgressBar();
//            webview.setVisibility(webview.INVISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
//
//            //progressBar.setVisibility(View.GONE);
//            progressBar.hideProgressBar();
//
//            view.setVisibility(webView.VISIBLE);
            super.onPageFinished(view, url);

        }
    }

    public class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(final Context context, final Intent intent) {
            //Log.v(LOG_TAG, "Receieved notification about network status");
            isNetworkAvailable(context);
        }

        public boolean isNetworkAvailable(Context context) {
            ConnectivityManager connectivity = (ConnectivityManager)
                    context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null) {
                    for (int i = 0; i < info.length; i++) {
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                            isConnected = true;
                            if (isConnected) {
                            }
                            return true;
                        }
                        isConnected = false;
                    }
                } else {
                    isConnected = false;
                }
            }
            return isConnected;
        }
    }
}

最佳答案

是的,当然,你可以从javascript获取信息到activity。

JavaScriptInterface 使用此接口(interface),您可以在 javascript 和 Android 之间进行通信。

有关更多信息,例如您可以 visit它。

关于javascript - 是否可以将登录信息从 webview 传递到 android Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687707/

相关文章:

android - ButterKnife findByID 方法在版本 8.8.0 中已弃用

javascript - Trigger.io 中是否有处理 Twitter 的 OAuth1.0a 的好方法?

javascript - jQuery 只渲染一个选择框

javascript - 循环中的多个设置超时

Android webview,文件上传,在onActivityResult中设置结果时崩溃

android - 使用 .setAcceptThirdPartyCookies 响应 native 应用程序

android - Webview下载PDF到手机

javascript - promise A+ 实现 : what to do when call then() and the promise is still pending?

java - 从 Activity 访问 View 类的 int 数据

android - 获取资源编号的值时没有包标识符