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