在WebView中捕获某些Javascript函数调用

Nex*_*ion 4 javascript android webview

我正在编写一个基本的Web浏览器,该浏览器只能访问某个网站(由另一家公司开发和维护)以进行我的工作,但是为了计算登录次数和在该网站上花费的时间(对于这两个非常重要的事情)我的公司),您需要使用网站上的某个按钮注销。我查看了页面源代码,所有按钮所做的只是调用一个javascript函数(命名为doLogoff()或类似名称),该函数在普通浏览器上仅会关闭您登录后创建的窗口。在我的应用程序中,所有操作均已完成在一个窗口中,没有选项卡(不需要它们),我也不完全确定关闭窗口的调用对我的应用程序有什么作用,但是WebView上的站点只是停留在该页面上,只能返回如果您单击链接,则转到登录页面。

无论如何,有什么方法可以检测何时在WebView中调用某个JavaScript函数?如果我可以绑定该功能并确保实际执行注销操作,那么我可以自己将Webview转到登录页面。

zna*_*nat 6

您可以使用JavascriptInterface。以下示例来自文档。反之亦然。您可以在JavaScript中创建一个函数,该函数将在您的活动中触发Java代码。

您可以在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

您将接口添加到WebView

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Run Code Online (Sandbox Code Playgroud)

在您的网页中,您可以从脚本中调用java方法

<script type="text/javascript">
    function showAndroidToast(toast) {
    Android.showToast(toast);
    }
</script>
Run Code Online (Sandbox Code Playgroud)