无法通过Monoandroid访问HTML元素值(Webview)。
上下文: - 我们正在开发的Monoandroid应用程序在其中一个布局中有一个Webview组件。我们正在加载/重用我们现有的(注册页面)HTML / JavaScript:有单选按钮(男/女rdBtns)。 但是无法在“提交”按钮(在webview外部)点击事件中访问所选的radioButton值。
问题的假设: 没问题。
问题:
如何获取单声道事件代码的值? 请建议一些替代方法来通过MONODROID访问webview外部的HTML元素值?
答案 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
中找到有趣的信息