如果在WKWebView页面里加载B站的视频,但是从页面返回到上级页面,后台还在播放声音。
方案一:
在页面的viewWillDisappear方法里加入如下代码:
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
如果上一个页面是viewController是没有问题的,但是上一个页面也是webview的话会导致页面空白。
方案二:
首先在初始化 webview 前先注入网页停止播放音乐的 js 代码。
//js代码
NSString *videos = @"document.getElementsByTagName('video');function pauseVideo(){var len = videos.length;for(var i=0;i<len;i++){videos[i].pause();}};var audios = document.getElementsByTagName('audio');function pauseAudio(){var len = audios.length;for(var i=0;i<len;i++){ audios[i].pause();}}";
WKUserScript *pauseJS = [[WKUserScript alloc]initWithSource:videos injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];WKUserContentController *userContent = [[WKUserContentController alloc]init];[userContent addUserScript:pauseJS];config.userContentController = userContent;
然后在页面的viewWillDisappear方法里加入如下代码:
[_webView evaluateJavaScript:@"pauseVideo()"completionHandler:nil];
[_webView evaluateJavaScript:@"pauseAudio()"completionHandler:nil];
但是对于我来说没用,还是会有声音。也不排除可能每个人的页面功能代码都不同,可能会好使,大家可以参考原文链接:https://blog.csdn.net/LeveBe/article/details/105996359
方案三:
在页面的viewWillDisappear方法里,也是js注入的方式,这种方式自测好用!!!
[_webView evaluateJavaScript:@"var videos = document.getElementsByTagName('video');\
for (var i=0;i < videos.length;i++){\
videos[i].pause();\
}"completionHandler:^(id_Nullableobj,NSError*_Nullableerror) {
NSLog(@"executeJsFunctionError -->%@",error) ;
}];