1

我正在开发一个在 Swift 中使用 WKWebView 访问网页的应用程序。该网站开始自动播放声音。我不想让自动播放声音。我想使用类似的东西,mediaPlayBackRequieresUserAction = true但它不适用于 WKWebView。

我正在尝试类似的东西

webConfiguration.mediaTypesRequiringUserActionForPlayback = []
webConfiguration.mediaTypesRequiringUserActionForPlayback = .all
webConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll

但它不起作用,Xcode 向我展示:

无法将类型“[WKAudiovisualMediaTypes].Type”的值分配给类型“WKAudiovisualMediaTypes”

自动引起音频声音的元素是:

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

这是我的 WKWebView 代码:

    import UIKit
import WebKit

class WidgetViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

var webView : WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    let url = URL(string: "https://danfg95glucose.azurewebsites.net/")
    let request = URLRequest(url: url!)

    let webConfiguration = WKWebViewConfiguration()
    webConfiguration.allowsInlineMediaPlayback = false
    webConfiguration.mediaTypesRequiringUserActionForPlayback = []

    webView = WKWebView(frame: CGRect( x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 500 ), configuration: webConfiguration)
    webView.navigationDelegate = self
    webView.load(request)
        self.view.addSubview(webView)
}
    }

对不起我的错误,我是新手,我正在学习编程。非常感谢您的每一个回复。

4

2 回答 2

3

您只需要设置一次 mediaTypesRequiringUserActionForPlayback。这应该有效。

webConfiguration.mediaTypesRequiringUserActionForPlayback = .all

你可以用它来限制它只是音频

webConfiguration.mediaTypesRequiringUserActionForPlayback = .audio
于 2018-01-29T15:32:06.270 回答
1

真令人沮丧。我发现在运行时更改 mediaTypesRequiringUserActionForPlayback 完全被忽略了。webView 配置仍然有 .none 作为它的值☹️

所以在我的 ViewController 的 viewDidLoad() 中我这样做了

private func workaroundAppleUserActionForPlaybackBug() -> WKWebView
{
    // you can set the value in the configuration, but it doesn't actually change!
    // even setting these values in IB doesn't work, it's always ZERO (meaning auto playback)
    //
    let frame = self.webView.frame
    let configuration = self.webView.configuration
    configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.all
    
    return WKWebView(frame: frame, configuration: configuration)
}

override func viewDidLoad()
{
    super.viewDidLoad()
    
    self.webView = workaroundAppleUserActionForPlaybackBug()
}
于 2021-01-21T22:31:21.243 回答