不要让webView在Swift上播放声音

时间:2018-01-19 17:21:38

标签: ios swift wkwebview

我正在使用WKWebView开发一个使用Swift构建的iOS应用程序和两个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)
    }
}

感谢您的回复,对不起我的问题,我是编程新手。

1 个答案:

答案 0 :(得分:1)

有问题的元素是:

<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)

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