问题起因: 公司一个客服页面接的meiqia,这个页面没有任何人维护,代码都找不到了。H5的机制可以跳过权限直接访问相册和文件,这不符合新的用户隐私政策。需要拦截。
image.png思路:
查看层级,发现弹框是由不同的view和viewcontroller组成,包含UIVisualEffectView、_UIPopoverBackgroundVisualEffectView、_UIVisualEffectBackdropView、_UIVisualEffectContentView、UITransitionView、_UITextEffectsRemoteView、UIDocumentMenuViewController。出现这个框的时候,加载uiwindow上。
思路一:hook UIDocumentMenuViewController。实操之后发现只有文件有用,而且消失方法也不好操作
思路二:hook uiwindow的didaddsubview 根据view类型判断,同时筛掉keyboradwindow之类的。成功拿到弹出时机~
怎么消失呢?~
1、把加上uiwindow的view remove掉。不行,会导致各种行为不正常,webview都打不开了,通信service异常
2、让view滚动一下,触发焦点更改。不行 没反应
3、加一个透明的edittext,获取焦点,弹出键盘再消失。不行 依然不下去
4、加一个透明的button,发送事件sendActionsForControlEvents 没反应
5、js发送点击事件,依然没反应
var eventhyf = document.createEvent('Events');eventhyf.initEvent('touchstart',true,true);window.parent.document.querySelector('iframe[name=chat]').contentDocument.getElementById('_MEIQIA_INPUT').dispatchEvent(eventhyf);window.parent.focus();this.close();
6、dismissViewControllerAnimated 可以下去,但按钮点不动了
7、dismiss 再pop 下去后并且关闭页面了。一了百了~!
网友评论