不允许 webView 在 Swift 上播放声音

Don't allow webView to play sound on Swift

我正在开发 iOS 内置 Swift 的应用程序,其中包含两个使用 WKWebView 的 webView。其中一个网络有默认声音,每次加载 webView 时都会发出声音(网络不是我的)。所以我需要停止或不允许 webView 重现任何声音。有什么方法可以得到这个?我尝试了一些代码,但它不起作用。我正在使用 xCode 9 和 Swift 4.

这是我试过的代码(但它不起作用):

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
}
catch let error as NSError {
    print(error)  
}

do {
    try AVAudioSession.sharedInstance().setActive(false)
}
catch let error as NSError {
    print(error)  
}

这是我的代码:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

@IBOutlet weak var webView: WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()

        let url = URL(string: "theWeb")
        let request = URLRequest(url: url!)
        webView.navigationDelegate = self
        webView.load(request)
    }
}

感谢您的回复,抱歉我的问题,我是编程新手。

有问题的元素是这些:

<audio src="audio/alarm.mp3" preload="auto" loop="true" class="alarm mp3" type="audio/mp3"></audio>
<audio src="audio/alarm2.mp3" preload="auto" loop="true" class="urgent alarm2 mp3" type="audio/mp3"></audio>

我要尝试的第一件事是更改 WKWebViewConfiguration。为此,您必须以编程方式创建 WKWebView 并将其插入到您的视图中。不幸的是,您不能使用 Interface Builder 执行此操作。这是一些可能有效的未经测试的代码。 (如果没有,我们可以进一步深入研究,但这就是我要开始的地方。如果这不起作用,下一步是实施 WKNaviagtionDelegate 来拒绝音频加载请求。)

let config = WKWebViewConfiguration()
config.mediaTypesRequiringActionForPlayback = WKAudiovisualMediaTypeAll

webView = WKWebView(frame: view.bounds, configuration: config)
view.addSubview(webView)

如果您的 Web 视图没有填满整个视图,那么我发现一个方便的方法是在 Interface Builder 中添加一个空白 UIView 并将其放置在您想要的位置.然后在运行时将 webView 放在那个空白视图中(并使其大小相同)。这很好,因为它可以让您在 IB 中完成所有布局,但仍会在需要的地方插入 Web 视图。