private async Task GetVerificationCodeAsync() // js to callback { var js = @"var node = document.getElementById('captcha_image'); var src = node.getAttribute('src'); window.external.notify(JSON.stringify(src));"; await InnerWebView.InvokeScriptAsync("eval", new[] { js }); }
/// <summary> /// insert id and password into webview from popup, and after that, click the submit button. /// </summary> /// <param name="user">your cache id</param> /// <param name="pass">your cache password</param> /// <returns></returns> private async Task InsertLoginMessageAsync(string user, string pass, string code = null, bool auto = false) { try { // insert js and run it, so that we can insert message into the target place and click the submit button. var autoToLogin = auto ? "checked" : ""; var newJSFounction = $@" var node_list = document.getElementsByTagName('input'); for (var i = 0; i < node_list.length; i++) {"{"} var node = node_list[i]; if (node.getAttribute('type') == 'submit') node.click(); if (node.id == 'email') node.innerText = '{user}'; if (node.id == 'password') node.innerText = '{pass}'; if (node.name == 'form_email') node.setAttribute('value', '{user}'); if (node.name == 'form_password') node.setAttribute('value', '{pass}'); if (node.id == 'captcha_field') node.innerText = '{code}'; if (node.id == 'remember') node.setAttribute('checked', '{autoToLogin}'); {"}"} "; await InnerWebView.InvokeScriptAsync("eval", new[] { newJSFounction }); } catch (Exception) { // if any error throws, reset the UI and report errer. Submit.IsEnabled = true; SubitRing.IsActive = false; ReportHelper.ReportAttentionAsync("Error"); } }
/// <summary> /// send message to windows so that we can get message of login-success whether or not. /// </summary> /// <returns></returns> private async Task AskWebViewToCallbackAsync() // js to callback { var js = @"window.external.notify( JSON.stringify( new Array ( document.body.innerText, document.body.innerHTML)));"; await InnerWebView.InvokeScriptAsync("eval", new[] { js }); }