通过Monoandroid访问HTML元素值(Webview)

时间:2012-08-09 15:08:45

标签: javascript html xamarin.android

无法通过Monoandroid访问HTML元素值(Webview)。

上下文: - 我们正在开发的Monoandroid应用程序在其中一个布局中有一个Webview组件。我们正在加载/重用我们现有的(注册页面)HTML / JavaScript:有单选按钮(男/女rdBtns)。 但是无法在“提交”按钮(在webview外部)点击事件中访问所选的radioButton值。

  1. 尝试使用带有WebView的JavaScriptInterface,但不可用。
  2. 通过JNI获得Java类的值,那里是我的C#(不成功)
  3. 问题的假设: 没问题。

    问题:

    如何获取单声道事件代码的值? 请建议一些替代方法来通过MONODROID访问webview外部的HTML元素值?

1 个答案:

答案 0 :(得分:0)

您应该捕获webview中网站发送的所有请求,例如您感兴趣的数据提交。因此,您应该将WebViewClient添加到WebView并实现

public bool ShouldOverrideUrlLoading (WebView view, string url)

这是一个示例,我用来获取WebView中当前(在webview中)所选地图的ID,以通过在地图上单击此对象来显示用户请求的相应详细信息。 JavaScript代码只是调用函数的href:

"<a href=\"javascript:getDetailsForSelectedStation();\">Details...</a>";

这是函数(其中eventFeature是一个全局变量)

function getDetailsForSelectedStation() {
    window.location.href = "www.ANFANGP" + eventFeature.attributes.saeulenid + "PDETAILANFRAGE";
}

(你也可以直接将href设置为我们的“假”-url) 它应该像通常的地址一样开始,所以我使用www。然后我使用P来标记C#中的字符串。结束标记“DETAILANFRAGE”将用于在C#中捕获此调用。

现在这是接收消息的WebViewClient:

class MyWebViewClient : WebViewClient
{
        public override bool ShouldOverrideUrlLoading (WebView view, string url)
        {
            //check, whether this was a details-url
            if (url.EndsWith ("DETAILANFRAGE")) {
                //tokenize the url
                string[] tokens = url.Split ('P');
                long saeulenid;
                if (long.TryParse (tokens [1], out  saeulenid)) {
                    //Here you can work with the data retrieved from the webview
                    ShowDetailsByID(saeulenid);
                    ...
                }
            }
            return true;
        }
}

必须将WebViewClient添加到WebView:

MyWebView.SetWebViewClient(new MyWebViewClient());

如果您需要更多上下文信息,您也应该覆盖构造函数。我正在移交当前活动,以便能够启动一个新的Activity(StartActivity())来显示我的应用程序中的详细信息视图。 顺便说一句,要从C#调用JavaScript代码,您只需要加载一个URL: MyWebView.LoadUrl( “JavaScript的:myFunction的(myParams)”); 对于调试非常有用的是WebChromeClient。

See this tutorial from xamarin for more details

当然,您可以在WebView reference

中找到有趣的信息