webview与js交互,window.close()回调方法onCloseWindow()无效的解决方法
来源:互联网 发布:关于喝酒的网络歌曲 编辑:程序博客网 时间:2024/06/15 00:42
最近项目涉及到android和前端交互,前端页面点击按钮跳转到新的页面,该页面存在业务逻辑判断,如果业务逻辑不符合会弹出一个对话框,当点击对话框的确定按钮后,整个新开的页面会close.
查阅网上的资料后我的代码是这样的:
在我自定义的MyWebChromeClient中,重写了onCreateWindow()和onCloseWindow().
参照网上资料
@Overridepublic void onCloseWindow(WebView window) { super.onCloseWindow(window); if (webView !=null){ relativeLayout.removeView(webView); } Log.e("log", "log");}发现日志并不会出现.看起来好像前端调用window.close后并没有反应.
经过自己不断尝试发现在我们的MyWebChromeClient中重写onCloseWindow()是不对的,因为在这里我们打开了一个新的窗口,而这个onCloseWindow()应该是关闭本身的窗口的时候才会走这个回调,而我们要关闭的是新开的页面窗口.所以在onCreateWindow()中我加入了下面的代码:
@Overridepublic boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { webView = new WebView(activity); WebSettings webSettings = webView.getSettings(); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setAppCacheEnabled(false);//是否使用缓存 webSettings.setSupportMultipleWindows(true); webSettings.setAllowContentAccess(true); RelativeLayout.LayoutParams vlp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); vlp.addRule(RelativeLayout.BELOW,R.id.top); vlp.addRule(RelativeLayout.ABOVE,R.id.workdetail_bottom); webView.setLayoutParams(vlp); relativeLayout.addView(webView); webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b2 = new AlertDialog.Builder(activity) .setTitle("报装信息").setMessage(message) .setPositiveButton("确定", new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b2.setCancelable(false); b2.create(); b2.show(); return true; } @Override public void onCloseWindow(WebView window) { super.onCloseWindow(window); if (webView !=null){ relativeLayout.removeView(webView); } Log.e("log", "log"); } }); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(webView); resultMsg.sendToTarget(); return true;}在onCreateWindow中我们创建了一个新的Webview,对它进行初始化设置之后设置webview.setWebChromeClient(),在这个方法中的webChromeClient中重写onCloseWindow(),这样的话才是在新的页面关闭的时候能响应window.close()方法的回调.
因为查阅网上资料发现并没有对这种情况的例子说得很清楚,所以本博客作为资料补充,希望能对其他人有所参考帮助.
阅读全文
1 0
- webview与js交互,window.close()回调方法onCloseWindow()无效的解决方法
- window.close无效的js解决方案
- 如何让安卓WebView支持js调用window.open()和window.close()的方法。
- WebView与js的交互
- js与webView的交互
- WebView 与 JS 的交互
- webView 与 JS 的交互
- WebView与Js的交互
- webview与js的交互
- iOS 几种webView与JS交互的方法
- 关于Android通过webview与js交互的方法
- Android中webview与JS交互、互调方法
- webView 与js交互方法(参考文献)
- webview与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- std::function
- HDU-2612-Find a way
- Word2Vec + Jieba 分词实现视频标签距离计算
- JDK安装多个版本出现Java -version和你配置的环境变量的jdk版本不一致的问题
- 过滤器
- webview与js交互,window.close()回调方法onCloseWindow()无效的解决方法
- jquery 获取div下的第一个子元素方法总结
- Java中的多线程
- 实习总结二
- UE4中窗口模式切换
- OpenCV的中求解线性问题或者最小二乘问题的方法cv::solve
- ELK
- 王爽汇编语言笔记——第十章检测点10.5(2)
- python opencv入门 几何变换(11)