【发布时间】:2014-01-13 19:20:49
【问题描述】:
我无法从 UIWebView 评估 youtube api javascript 命令
这些命令在 Safari 和 Firefox 中正确评估
webview 使用选项初始化
allowsInlineMediaPlayback = YES;
mediaPlaybackRequiresUserAction = NO;
我正在加载的 Html 是:
<div id="player"></div>
<script>
var tag = document.createElement('script');
//playerVars: { 'autoplay': 0, 'modestbranding': 1, 'rel': 0, 'showinfo': 0, 'iv_load_policy': 3, 'controls': 1, 'playsinline':1 },
var configuration = {
playerVars: {
'playsinline':1,
'showinfo': 0,
'modestbranding': 1
},
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
};
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function setup(key, value) {
configuration[key] = value;
}
function configurePlayer(key, value) {
configuration.playerVars[key] = value;
}
// area for the code injection
setup('videoId', 'cDhlx60nTCU');
setup('startingTime', 10);
setup('autoPlay' , true);
setup('width', 400);
setup('height', 200);
configurePlayer('controls', true);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', configuration);
}
function onPlayerReady(event) {
if (configuration['autoPlay']) {
if (configuration['startingTime']) {
player.playVideoAt(configuration['startingTime']);
} else {
event.target.playVideo();
}
}
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
// Do something...
}
}
function stopVideo() {
player.stopVideo();
return "OK";
}
</script>
Printing description of html:
<div id="player"></div>
<script>
var tag = document.createElement('script');
//playerVars: { 'autoplay': 0, 'modestbranding': 1, 'rel': 0, 'showinfo': 0, 'iv_load_policy': 3, 'controls': 1, 'playsinline':1 },
var configuration = {
playerVars: {
'playsinline':1,
'showinfo': 0,
'modestbranding': 1
},
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
};
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function setup(key, value) {
configuration[key] = value;
}
function configurePlayer(key, value) {
configuration.playerVars[key] = value;
}
// area for the code injection
setup('videoId', 'cDhlx60nTCU');
setup('startingTime', 0);
setup('autoPlay' , true);
setup('width', 320);
setup('height', 288);
configurePlayer('controls', true);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', configuration);
}
function onPlayerReady(event) {
if (configuration['autoPlay']) {
if (configuration['startingTime']) {
player.playVideoAt(configuration['startingTime']);
} else {
event.target.playVideo();
}
}
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
// Do something...
}
}
function stopVideo() {
player.stopVideo();
return "OK";
}
</script>
我正在用这个加载 webview 页面
-(void)viewDidAppear:(BOOL)animated
{
[self.webview loadHTMLString:html baseURL:[NSURL URLWithString:@"html"]];
}
在 webview 委托调用webViewDidFinishLoad之后
我尝试使用这种语法在播放器上调用方法
-(void)pause
{
[self.webview stringByEvaluatingJavaScriptFromString:@"player.pauseVideo();"];
}
是否有任何标志会干扰 java 脚本评估?
【问题讨论】:
-
您是否尝试过使用 Safari 或 Chrome 中的网络调试器将相同的 javascript 发送到页面?
-
是的。当我在模拟器中运行页面并使用 safari 进行调试时,'player' 对象没有用正确的方法定义——它只有内部属性,没有 api 方法。但是当我在 chrome/firefox/safari 中加载页面时,一切都已正确定义
-
我在这里看不到有什么东西可以让你跳出来。在我发布我的示例代码之前,我希望您再尝试一件事:用有效的 HTML 包围。示例:刚刚在没有有效 HTML 的情况下测试了我的脚本。有些东西有效,有些东西无效,但我没有看到确切的问题。试一试并发布结果。我也试过了。我可能没有发布它,但它对我没有帮助
标签: javascript ios uiwebview youtube-api youtube-javascript-api