関心のあるデータの送信など、Web ビュー内の Web サイトによって送信されるすべての要求をキャプチャする必要があります。したがって、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 リファレンスで興味深い情報を見つけることができます。