我正在使用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)
}
}
感谢您的回复,对不起我的问题,我是编程新手。
答案 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视图。