Как прочитать значение из текстового поля имени пользователя на странице входа в систему, загруженного в веб-представление xamarin android - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь получить значение в текстовом поле имени пользователя со своей страницы входа после того, как пользователь ввел его на веб-странице с помощью веб-просмотра в Xamarin android.

Я пытался использовать «document.getelementbyid ('useranme'). Values"

, но он всегда возвращает нулевые значения. Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

В конце концов я нашел решение для моей проблемы.

У меня есть пользовательская функция OnLoadResource в веб-просмотре, которая помогла мне получить данные, которые я искал

public override void OnLoadResource(WebView view, string url)
{
    try
    {
        view.EvaluateJavascript("document.getElementById('username').value;", this);

    }
    catch (Java.Lang.Exception oe)
    {

    }
    base.OnLoadResource(view, url);
}

Спасибо.

0 голосов
/ 21 октября 2019

Вы можете использовать метод вызова Js в C #.

Например, я создаю login.html в папке assests:

<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="lolkittens" />
<script charset="utf-8" type="text/javascript">
    function check() {
        var username = document.getElementById("ID").value;
        var password = document.getElementById("Pass").value;
        alert("Username: " + username + "  Password: " + password);

        return CSharp.ShowToast(username);
    }

</script>
<title>Untitled 1</title>

<div id="main" style="width: 300px; height: 200px;">
    <form name="MainForm" id="MainForm">
        <input id="ID" name="ID" type="text" size="20" />
        <input id="Pass" name="Pass" type="password" size="20" />
    </form>
    <button value="click Me" onclick="check()"> Click Me </button>
</div>

В Mainactivity.cs,

 public class MainActivity : AppCompatActivity
{

    private WebView webview;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

        webview = FindViewById<WebView>(Resource.Id.webview);
        WebSettings settings = webview.Settings;
        settings.JavaScriptEnabled = true;
        // load the javascript interface method to call the foreground method
        webview.AddJavascriptInterface(new MyJSInterface(this), "CSharp");
        webview.SetWebViewClient(new WebViewClient());
        //webview.EvaluateJavascript("javascript: check();", new EvaluateBack());

        webview.LoadUrl("file:///android_asset/login.html");
    }
}

Создайте класс C #, который будет возвращать значение.

class MyJSInterface : Java.Lang.Object
{
    Context context;

    public MyJSInterface(Context context)
    {
        this.context = context;
    }

    [JavascriptInterface]
    [Export]
    public void ShowToast(string msg)
    {
        Toast.MakeText(context, msg, ToastLength.Short).Show();
    }
}

Пожалуйста, не забудьте добавить Mono.Android.Export.dll в вашей ссылке.

Подробнее о методе вызова C #, пожалуйста, посмотрите:

https://github.com/xamarin/docs-archive/tree/master/Recipes/android/controls/webview/call_csharp_from_javascript

Если мой ответ поможет, пожалуйста, не забудьте пометить мойответ как ответ, спасибо.

...