【问题标题】:mediaTypesRequiringUserActionForPlayback not working SwiftmediaTypesRequiringUserActionForPlayback 不工作 Swift
【发布时间】:2018-01-29 14:58:07
【问题描述】:

我正在开发一个在 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)
}
    }

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

【问题讨论】:

    标签: ios swift xcode wkwebview wkwebviewconfiguration


    【解决方案1】:

    您只需要设置一次 mediaTypesRequiringUserActionForPlayback。这应该可以。

    webConfiguration.mediaTypesRequiringUserActionForPlayback = .all
    

    您可以将其限制为仅音频

    webConfiguration.mediaTypesRequiringUserActionForPlayback = .audio
    

    【讨论】:

    • 感谢您的回复,我只使用了一个但我也遇到了同样的问题:Cannot assign value of type '[WKAudiovisualMediaTypes].Type' to type 'WKAudiovisualMediaTypes'你知道我该怎么办吗?
    • 在 audio.play() 我仍然得到 Unhandled Promise Rejection: NotAllowedError: The request is not allowed by the user agent or the platform in the current context,可能是因为用户拒绝了权限。即使在我交往过很多之后。当我不希望任何需要用户操作时,也不会将其设置为全部肯定需要用户操作吗?
    【解决方案2】:

    太令人沮丧了。 我发现在运行时更改 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()
    }
    

    【讨论】:

    • 我发现我也需要这样做,谢谢分享这个技巧。
    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-04-27
    • 2017-05-28
    相关资源
    最近更新 更多