gpt4 book ai didi

swift - onYouTubeIframeAPIReady 在 iOS 应用程序的 WKWebView 中不会触发

转载 作者:行者123 更新时间:2023-11-30 10:33:53 25 4
gpt4 key购买 nike

我试图确保用户在转到下一个屏幕之前已经观看了整个 YouTube 视频。

我从 SO 中的另一个回复中得到了这个设计,我可以在其中看到实际播放了多少视频。问题是,我只收到“##### Outside!”的通知。处理程序。

发送的所有其他消息都不起作用,因为(我认为)onYouTubeIframeAPIReady 函数从未执行。

这是一个实例并且完美运行: http://jsfiddle.net/sg6zkrmp/

所以我不明白为什么它在这里对我不起作用。

   func setUpUI() {
let js = """
var player, timer, timeSpent = [], display = document.getElementById('display');

function onYouTubeIframeAPIReady() {
window.webkit.messageHandlers.clickListener.postMessage('API Ready!');
player = new YT.Player( 'player', {
events: { 'onStateChange': onPlayerStateChange }
});
}

function onPlayerStateChange(event) {
window.webkit.messageHandlers.clickListener.postMessage('a change occurred');
if(event.data === 1) { // Started playing
if(!timeSpent.length){
for(var i=0, l=parseInt(player.getDuration()); i<l; i++) timeSpent.push(false);
}
timer = setInterval(record,100);
} else {
clearInterval(timer);
}
}

function record(){
window.webkit.messageHandlers.clickListener.postMessage('Recording!');
timeSpent[ parseInt(player.getCurrentTime()) ] = true;
showPercentage();
}

function showPercentage(){
var percent = 0;
for(var i=0, l=timeSpent.length; i<l; i++){
if(timeSpent[i]) percent++;
}
percent = Math.round(percent / timeSpent.length * 100);
window.webkit.messageHandlers.clickListener.postMessage('Give me that percentage!!');
}
window.webkit.messageHandlers.clickListener.postMessage('##### Outside!');
"""
let script = WKUserScript(source: js, injectionTime: .atDocumentEnd, forMainFrameOnly: false)

let webConfiguration = WKWebViewConfiguration()
webConfiguration.allowsInlineMediaPlayback = true
webConfiguration.userContentController.addUserScript(script)
webConfiguration.userContentController.add(self, name: "clickListener")
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
webView.backgroundColor = .red

.......

let html = """
<iframe id="player" src="https://www.youtube.com/embed/DjB1OvEYMhY?enablejsapi=1"></iframe>
<p id="display"></p>
"""
webView.loadHTMLString(html, baseURL: nil)
}
.......
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
{
print("------> ", message.body)
}
}

顺便说一句,当 View 加载时,我可以看到该消息打印了几次而不是一次:

------>  ##### Outside!
------> ##### Outside!
------> ##### Outside!
------> ##### Outside!
------> ##### Outside!
------> ##### Outside!

最佳答案

好吧,我为有兴趣的人找到了它。我只需要将其添加到我的 html 中:

let html = """
<script src="https://www.youtube.com/iframe_api"></script>
<iframe id="player" src="https://www.youtube.com/embed/DjB1OvEYMhY?enablejsapi=1&controls=0&playsinline=1"></iframe>
<p id="display"></p>
"""

现在它工作得很好。

关于swift - onYouTubeIframeAPIReady 在 iOS 应用程序的 WKWebView 中不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58510222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com