Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WebView中捕获某些Javascript函数调用_Javascript_Android_Webview - Fatal编程技术网

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

在WebView中捕获某些Javascript函数调用,javascript,android,webview,Javascript,Android,Webview,我正在编写一个基本的web浏览器,它只能访问某个网站(由另一家公司开发和维护),用于我的工作,但是为了计算登录和在该网站上花费的时间(对我的公司来说这是两件非常重要的事情),您需要使用网站上的某个按钮注销。 我查看了页面源代码,按钮所做的只是调用一个javascript函数(名为doLogoff()或类似的东西),在普通浏览器上,它只会关闭登录后创建的窗口。 在我的应用程序中,所有操作都在一个窗口中完成,没有选项卡(不需要它们),我也不完全确定关闭窗口的调用对我的应用程序有何影响,但WebVie

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


在WebView中调用某个JavaScript函数时,是否仍需要检测?如果我可以绑定该函数并确保确实执行了注销,那么我可以自己让webview转到登录页面。

您可以使用
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();
    }
}
将界面添加到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>


函数showAndroidToast(toast){
showToast(toast);
}

首先,创建由NathanZ指定的JavascriptInterface

然后重写要挂接的函数,如下所示:

webview.loadUrl("javascript:" +
"var functionNameOriginal = functionName;" +
"functionName = function(args) {" +
    "Android.showToast();" +
    "functionNameOriginal(args);" +
"}");

我想我应该把我的问题写得更好。我正在尝试挂接一个javascript函数调用,这样当它在网站上被调用时,我的应用程序可以做一些事情。我无法访问该页面的源代码,也无法向其添加任何内容。因此,我需要使用这种方法。我在下面回答了这个问题。(挂接到网站上的javascript函数调用)您还应该向JavascriptInterface类中的showToast(..)方法添加@JavascriptInterface注释。嘿!谢谢你的回答。我添加了@JavascriptInterface注释,因为它是编译它所必需的!:)但您只是在这里加载一个javascript方法。你在哪里加载页面?