0

Monoandroid を介して HTML 要素の値 (Webview) にアクセスできません。

コンテキスト: - 開発中の Monoandroid アプリには、レイアウトの 1 つに Webview コンポーネントがあります。既存の (登録ページ) HTML/JavaScript を読み込んで再利用しています: ラジオ ボタン (男性/女性 rdBtns) があります。ただし、「送信」ボタン (Web ビューの外側) のクリック イベントで、選択した radioButton の値にアクセスできません。

  1. WebView で JavaScriptInterface を使用しようとしましたが、利用できません。
  2. JNIを介してJavaクラスに値を取得し、そこに私のC#(失敗)

問題の前提条件: ヒントなし。

質問:

モノイベントコードの値を取得するにはどうすればよいですか? MONODROID を介して webview の外にある HTML 要素の値にアクセスする別の方法を提案してください。

4

1 に答える 1

0

関心のあるデータの送信など、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 リファレンスで興味深い情報を見つけることができます。

于 2012-08-11T13:28:34.440 に答える