【问题标题】:Don't allow webView to play sound on Swift不允许 webView 在 Swift 上播放声音
【发布时间】:2018-01-20 02:41:32
【问题描述】:

我正在使用 WKWebView 开发一个内置 Swift 的 iOS 应用程序,其中包含两个 webViews。其中一个网络有一个默认声音,每次加载 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)
    }
}

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

【问题讨论】:

  • 欢迎您,问得好。你知道页面如何播放声音吗?它是否有 JavaScript onLoad 处理程序或其他东西?声音是媒体文件还是 HTML5 WebAudio 或其他什么?您可能必须重新配置 WKWebView 或注入一些 JavaScript,但这取决于页面发出声音的方式。
  • 感谢您的回复@RobNapier 这是网络:danfg95glucose.azurewebsites.net 如果您打开网络,则必须按声音按钮(右上角),这没关系,但如果大数字高于 160 或低于 70 它星号听起来像一个警报。这是我想避免的声音,但我不知道它是媒体文件还是 HTML5 WebAudio。谢谢您的答复。我最近才开始编程,有点迷茫。
  • @RobNapier 我正在寻找一种方法来静音/取消静音来自通过 WKWebView 访问的任何随机网站的所有声音。因此,我不知道页面如何播放声音。我不熟悉Javascript。是否有任何脚本可以处理所有可以静音/取消静音最常见情况的情况?例如 youtube/vimeo/soundcloud 很常见,并且可能都播放不同的声音,但是以非常规的播放声音方式建立自己的网站的人并不常见。脚本将处理前者,但不处理后者。

标签: ios swift wkwebview


【解决方案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)

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

【讨论】:

  • 感谢您的回复,对我帮助很大。但最后我将WKAudiovisualMediaTypesAll(它不适用于swift 4)更改为.audio
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多