0

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

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

  1. 尝试将 JavaScriptInterface 与 WebView 一起使用,但不可用。
  2. 通过 JNI 获得 Java 类的值,我的 C#(不成功)

问题的假设:没有线索。

问题:

如何获得单声道事件代码的值?请提出一些替代方法来通过 MONODROID 访问 webview 之外的 HTML 元素值?

4

1 回答 1

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());

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

有关更多详细信息,请参阅 xamarin 的本教程

当然,您可能会在WebView 参考中找到有趣的信息

于 2012-08-11T13:28:34.440 回答