您应该捕获网站在您的 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 参考中找到有趣的信息