- 背景故事:
項目中涉及到一個html的頁面.
wkwebview加載的web頁面.
需要
“在web中點擊返回主頁按鈕時,返回到原生主頁,而非web主頁”
2018年一月2號的我還不懂html5和h5與原生的交互.
嘗試了很多方法....首先,html5 網站的代碼是不能改的...javascript也沒有預留和ios交互的接口...里面的頁面轉換也不能用wkwebview的delegate攔截到...
于是想了一個我自己感覺有點笨的方法...
思路是用UITouch來控制webview的點擊事件,每次點擊之后過0.5s(留出頁面轉換的事件)去獲取當前的url,如果url是web主頁的url就返回到原生主頁..
代碼如下:
先創建一個名為CustomWKWebView的子類,.h文件如下
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
static UIEvent *e = nil;
if (e != nil && e == event) {
e = nil;
return [super hitTest:point withEvent:event];
}
e = event;
if (event.type == UIEventTypeTouches) {
NSSet *touches = [event touchesForView:self];
UITouch *touch = [touches anyObject];
if (touch.phase == UITouchPhaseBegan) {
NSLog(@"Touches began");
NSLog(@"%@",self.URL.absoluteString);
[self performSelector:@selector(delayMethod)
withObject:nil
afterDelay:0.5f];
}else if(touch.phase == UITouchPhaseEnded){
NSLog(@"Touches Ended");
}else if(touch.phase == UITouchPhaseCancelled){
NSLog(@"Touches Cancelled");
}else if (touch.phase == UITouchPhaseMoved){
NSLog(@"Touches Moved");
}
}
return [super hitTest:point withEvent:event];
}
-(void)delayMethod
{
NSLog(@"%@",self.URL.absoluteString);
if ([self.URL.absoluteString isEqualToString:@"主頁的url"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"wkwebview-backtohome" object:nil];
}
}