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

标签 javascript android webview

我正在编写一个基本的 Web 浏览器,它只能访问某个网站(由另一家公司开发和维护)来完成我的工作,但是为了计算登录和在该网站上花费的时间(两个非常对我公司很重要)您需要使用网站上的某个按钮注销。 我查看了页面源代码,该按钮所做的只是调用一个 javascript 函数(名称类似于 doLogoff() 或类似名称),该函数在普通浏览器上只会关闭您登录后创建的窗口。 在我的应用程序中,一切都在一个窗口中完成,没有选项卡(不需要它们)而且我不完全确定关闭窗口的调用对我的应用程序做了什么,但 WebView 上的站点只是保持打开状态该页面,只有在您单击链接时才会返回到登录页面。

有没有办法检测某个 JavaScript 函数何时在 WebView 中被调用?如果我可以绑定(bind)该函数并确保确实执行了注销,那么我就可以让 webview 自己转到登录页面。

最佳答案

您可以使用 JavascriptInterface 来做到这一点。以下示例来自 documentation .它以相反的方式工作。您可以在 javascript 中创建一个函数,该函数将在您的 Activity 中触发 java 代码。

您在 java 代码中声明您的接口(interface)。

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");

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

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

关于javascript - 在 WebView 中捕获某些 Javascript 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12010669/

相关文章:

javascript - 获取文本字段或选择框的值或文本

javascript - 单击提交按钮时的 HTML 表单验证

java - 有多少用户可以处理 android 客户端,带套接字的 pc java 服务器?

html - CSS 未应用于使用 WebView 的 OSX 应用程序

javascript - 在 Redux reducer 中更新和重新定位数组中的对象

javascript - 如何同时使用 Angular 模型更改和双重绑定(bind)

android - Flutter image_picker 不适用于 PlatformException

android - Android 上的 LastFM 请求

android - 监听来自 java 的 javascript 函数调用 - Android

javascript - 从 DIV 元素中获取值