4

私は自分の仕事のために特定の Web サイト (別の会社によって開発および保守されている) にのみアクセスできる基本的な Web ブラウザーを作成していますが、ログインとサイトでの滞在時間をカウントするために (2 つの非常に重要なこと私の会社) サイトの特定のボタンでログアウトする必要があります。私はページのソースを見て、そのボタンが行うのは、通常のブラウザではログイン後に作成されたウィンドウを閉じるだけのjavascript関数(doLogoff()などの名前)を呼び出すことだけです.私のアプリケーションではすべてが行われます. 1つのウィンドウにはタブがありません(タブは必要ありません)。ウィンドウを閉じる呼び出しがアプリケーションに何をするのか完全にはわかりませんが、WebViewのサイトは単にそのページにとどまり、戻るだけですリンクをクリックすると、ログインページに移動します。

WebViewで特定のJavaScript関数が呼び出されたときに検出する方法はありますか? その関数をバインドして、ログアウトが実際に実行されていることを確認できれば、自分で webview をログイン ページに移動させることができます。

4

2 に答える 2

6

でそれを行うことができますJavascriptInterface。次の例は、ドキュメントからのものです。それは逆に機能します。アクティビティで Java コードをトリガーする関数を JavaScript で作成できます。

Java コードでインターフェイスを宣言します。

public class JavaScriptInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

インターフェイスを WebView に追加します

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

Web ページでは、スクリプトから Java メソッドを呼び出すことができます。

<script type="text/javascript">
    function showAndroidToast(toast) {
    Android.showToast(toast);
    }
</script>
于 2012-08-17T18:18:56.140 に答える
0

まず、NathanZ で規定されている JavascriptInterface を作成します。

次に、次のように、フックする関数をオーバーライドします。

webview.loadUrl("javascript:" +
"var functionNameOriginal = functionName;" +
"functionName = function(args) {" +
    "Android.showToast();" +
    "functionNameOriginal(args);" +
"}");
于 2013-05-20T21:24:25.433 に答える