gpt4 book ai didi

javascript - objective-c - 如何使用 JS 自动播放 Vimeo 视频

转载 作者:可可西里 更新时间:2023-11-01 03:42:05 24 4
gpt4 key购买 nike

尝试让 Youtube/Vimeo 视频在 iOS 上自动开始播放的每个人都知道这可能是一项痛苦的任务。 Apple 出于正确的原因阻止了“自动播放”参数,但有时您仍然需要让此功能正常工作。

我对 auto playing youtube videos 也有同样的问题,显然,要让自动播放工作,你需要做一些 javascript 魔术,听播放器的 'onReady' 事件,而不是当播放器加载并准备播放时你调用 'player.play()' 来启动它而不任何其他用户干预。

Vimeo 也有一些 javascript API,我很确定你可以用它来实现自动播放,我只是不知道如何使用它。

他们有一个名为 Froogaloop 的 JS 迷你库来简化事情,我看到了 this answer by @ila谁将它与以下 html 字符串结合使用:

NSString *htmlString = [NSString stringWithFormat:
@"<html><head>"
"<script src=\"froogaloop.js\"></script>"
" <script>"
"function ready()"
"{$f(document.getElementById(\"player\")).api(\"play\");}"
"function func1() "
"{$f(document.getElementById(\"player\")).addEvent(\"ready\", ready);}"
"window.onload=func1;"
"</script></head><body>"
"<iframe id=\"player\" src=\"http://player.vimeo.com/video/39287488?api=1&amp;player_id=player\" width=\"315\" height=\"455\" frameborder=\"0\" webkit-playsinline>"
" </iframe></body></html>"];

- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"webview loaded");
NSString *path = [[NSBundle mainBundle] pathForResource:@"froogaloop" ofType:@"js"];
NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[webView stringByEvaluatingJavaScriptFromString:jsCode];
}

但这对我不起作用,在向这段代码添加警报后,我可以看到调用了 func1() 并执行了“addEvent”行,但是 它表明 ready() 方法永远不会被调用,因为 'ready' 事件从未触发(?)...

有什么想法吗?

最佳答案

我对这个问题的第一个回答是一个不太理想的蛮力方法。我建议使用 Vimeo Javascript API 和 froogaloop 查看我的第二种方法。

我假设您在 html 页面中使用 Vimeo iframe,并且您在 iOS 应用程序或 Safari 中的 UIWebView 中使用此页面。

对 Vimeo iframe 的一些反省表明它最初不加载 html 视频标签。您将必须以编程方式点击“播放”按钮才能加载视频。

为了在今天(2013 年 4 月,它可能会改变)做到这一点,您只需捕获正确的元素并调用正确的函数。最好用一些有效的示例代码来演示。

// You are loading this page inside a UIWebView
<html>
<head></head>
<body>
<iframe width="" height="" src="http://player.vimeo.com/video/62207569 " frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<script>
// Add a listener for the window's load event
window.addEventListener('load', onWindowLoad, false);

function onWindowLoad(event) {
//use a loop to continue checking the vimeo iframe for the 'play' button
checkForTrue(isIframeButtonLoaded, iFrameButtonLoaded);
}

function checkForTrue(func, callback) {
setTimeout(function() {
if (func()) {
callback( iFrameButton() );
} else {
checkForTrue(func, callback);
};
}, 1000);
}

//finds the 'play' button within the Vimeo iframe
function iFrameButton() {
//window.frames[0].document.getElementsByTagName('div')[1]; // this also works...
return window.frames[0].document.getElementsByTagName('button')[5];
}

//simple boolean condition to check for the iframe button
function isIframeButtonLoaded() {
return ( iFrameButton() != null );
}

//once the button is loaded, click it
function iFrameButtonLoaded(iFrameButton) {
iFrameButton.click();
}

</script>
</body>
</html>

This source code is also available as a gist

理智的人可能会说这不是最好的方法,但为了在您的 iOS 应用程序中自动播放 vimeo 视频,它似乎确实有效。

从您的包中加载 html 文件并将其加载到 UIWebView 的代码是样板文件:

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"VimeoTrial" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];

[self.webView loadHTMLString:htmlString baseURL:nil];
}

关于javascript - objective-c - 如何使用 JS 自动播放 Vimeo 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15741057/

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