我正在编写一个基本的网络浏览器,只能访问某个网站(由其他公司开发和维护)以进行我的工作,但是为了登录并计算在网站上花费的时间(两个非常对我公司来说重要的事情)你需要在网站上用某个按钮注销。 我查看了页面源代码,所有按钮都调用了一个javascript函数(类似于doLogoff(或类似名称)),它在普通浏览器上只关闭登录后创建的窗口。 在我的应用程序中,一切都在一个窗口中完成,没有选项卡(不需要它们),我不完全确定关闭窗口的调用对我的应用程序有什么影响,但WebView上的站点只是保持在该页面,只有在您点击链接时才会返回登录页面。
无论如何都要检测何时在WebView中调用某个JavaScript函数?如果我可以绑定该函数并确保实际执行注销,那么我可以自己将webview转到登录页面。
答案 0 :(得分:5)
您可以使用JavascriptInterface
执行此操作。以下示例来自documentation。它反过来工作。您可以在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>
答案 1 :(得分:0)
首先,创建由NathanZ规定的JavascriptInterface。
然后覆盖要挂钩的函数,如下所示:
webview.loadUrl("javascript:" +
"var functionNameOriginal = functionName;" +
"functionName = function(args) {" +
"Android.showToast();" +
"functionNameOriginal(args);" +
"}");