首先在初始化 webview 前先注入网页停止播放音乐的 js 代码。
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.allowsInlineMediaPlayback = YES;
config.requiresUserActionForMediaPlayback = NO;
//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();}}";
// 注入网页停止播放音乐的js代码
WKUserScript *pauseJS = [[WKUserScript alloc]initWithSource:videos injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *userContent = [[WKUserContentController alloc]init];
[userContent addUserScript:pauseJS];
config.userContentController = userContent;
webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
webView.navigationDelegate = self;
[self.view addSubview:webView];
其次在网页已经消失【- (void)viewDidDisappear:(BOOL)animated】的方法中调用 js 代码中的停止播放音乐方法。
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// 解决返回后语音一直播放的问题
[self pausePlay];
}
/// 暂停播放网页内的音频、视频
- (void)pausePlay {
[webView evaluateJavaScript:@"pauseVideo()" completionHandler:nil];
[webView evaluateJavaScript:@"pauseAudio()" completionHandler:nil];
}
另外,使用以下方法也可以解决,但该方法存在弊端,如果网页中调用了相册并选择图片后,页面会变成空白。
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]];
[webView loadRequest:request];