如何通过 javascript 在 c# 中首次播放嵌入式 YouTube(使用 Gecko 浏览器)?
How to play an embedded YouTube (using the Gecko browser) for the first time in c# through javascript?
我目前正在创建一个 WPF 应用程序,并将 Gecko 浏览器导航到一个嵌入的 youtube 视频 (www.youtube.com/embed/YId_6G-YLpQ)。
到目前为止,我已经通过 javascript 命令完成了以下操作:
- 使用以下方式播放暂停的视频:
document.getElementsByTagName('video')[0].play()
- 暂停视频使用:
document.getElementsByTagName('video')[0].pause()
但是,我不知道如何在第一次开始播放视频。使用播放方法不起作用。我需要通过代码 运行 它而不是通过物理点击,因为它会触发调度计时器,该计时器会频繁地提高 属性 更改为 return 当前视频时间。
到目前为止,我有一些肮脏的方法只是为了度过难关:
手动
- 我手动按下播放按钮(用鼠标点击它)
- 暂停视频(使用带有暂停方法的 wpf 按钮)
- 将时间滑块从视频开头一直拖到后面
- 播放视频(使用 wpf 按钮和播放方法)
它并没有像我希望的那样无缝,但如果我不更改视频,我只需要做一次。
半手动
- 创建一个名为 'youTubeVideoHasStarted'
的变量
- 播放视频方法在 'youTubeVideoHasStarted' 上执行 if,如果 true = 播放视频,如果 false = 在 YouTube 视频上执行模拟的左键单击(我可能会在这里使用 canvas 并将两者分开height/width 以获得视频的死点点击)然后设置 'youTubeVideoHasStarted = true' 并在 link 更改后重置后者
这是我的代码供参考
public RelayCommand PlayYouTubeCommand { get; private set; }
public RelayCommand PauseYouTubeCommand { get; private set; }
public bool PlayYouTubeCanUse(object msg)
{
if (!YouTubeIsPlaying)
return true;
return false;
}
public void PlayYouTube(object msg)
{
try
{
using (Gecko.AutoJSContext js = new Gecko.AutoJSContext(YouTubeBrowser.Window))
{
js.EvaluateScript("document.getElementsByTagName('video')[0].play()");
}
RaisePropertyChanged("YouTubeCurrentTime");
YouTubeIsPlaying = true;
}
catch { MessageBox.Show("Error playing video"); }
}
public bool PauseYouTubeCanUse(object msg)
{
if (YouTubeIsPlaying)
return true;
return false;
}
public void PauseYouTube(object msg)
{
try
{
using (Gecko.AutoJSContext js = new Gecko.AutoJSContext(YouTubeBrowser.Window))
{
js.EvaluateScript("document.getElementsByTagName('video')[0].pause()");
}
RaisePropertyChanged("YouTubeCurrentTime");
YouTubeIsPlaying = false;
}
catch { MessageBox.Show("Error pausing video"); }
}
private GeckoWebBrowser youTubeBrowser;
public GeckoWebBrowser YouTubeBrowser
{
get { return youTubeBrowser; }
set { youTubeBrowser = value; RaisePropertyChanged("YouTubeBrowser"); }
}
这是使用的属性和方法的列表:
我用了document.getElementsByTagName('video')[0].click()
我目前正在创建一个 WPF 应用程序,并将 Gecko 浏览器导航到一个嵌入的 youtube 视频 (www.youtube.com/embed/YId_6G-YLpQ)。
到目前为止,我已经通过 javascript 命令完成了以下操作:
- 使用以下方式播放暂停的视频:
document.getElementsByTagName('video')[0].play()
- 暂停视频使用:
document.getElementsByTagName('video')[0].pause()
但是,我不知道如何在第一次开始播放视频。使用播放方法不起作用。我需要通过代码 运行 它而不是通过物理点击,因为它会触发调度计时器,该计时器会频繁地提高 属性 更改为 return 当前视频时间。
到目前为止,我有一些肮脏的方法只是为了度过难关:
手动
- 我手动按下播放按钮(用鼠标点击它)
- 暂停视频(使用带有暂停方法的 wpf 按钮)
- 将时间滑块从视频开头一直拖到后面
- 播放视频(使用 wpf 按钮和播放方法)
它并没有像我希望的那样无缝,但如果我不更改视频,我只需要做一次。
半手动
- 创建一个名为 'youTubeVideoHasStarted' 的变量
- 播放视频方法在 'youTubeVideoHasStarted' 上执行 if,如果 true = 播放视频,如果 false = 在 YouTube 视频上执行模拟的左键单击(我可能会在这里使用 canvas 并将两者分开height/width 以获得视频的死点点击)然后设置 'youTubeVideoHasStarted = true' 并在 link 更改后重置后者
这是我的代码供参考
public RelayCommand PlayYouTubeCommand { get; private set; }
public RelayCommand PauseYouTubeCommand { get; private set; }
public bool PlayYouTubeCanUse(object msg)
{
if (!YouTubeIsPlaying)
return true;
return false;
}
public void PlayYouTube(object msg)
{
try
{
using (Gecko.AutoJSContext js = new Gecko.AutoJSContext(YouTubeBrowser.Window))
{
js.EvaluateScript("document.getElementsByTagName('video')[0].play()");
}
RaisePropertyChanged("YouTubeCurrentTime");
YouTubeIsPlaying = true;
}
catch { MessageBox.Show("Error playing video"); }
}
public bool PauseYouTubeCanUse(object msg)
{
if (YouTubeIsPlaying)
return true;
return false;
}
public void PauseYouTube(object msg)
{
try
{
using (Gecko.AutoJSContext js = new Gecko.AutoJSContext(YouTubeBrowser.Window))
{
js.EvaluateScript("document.getElementsByTagName('video')[0].pause()");
}
RaisePropertyChanged("YouTubeCurrentTime");
YouTubeIsPlaying = false;
}
catch { MessageBox.Show("Error pausing video"); }
}
private GeckoWebBrowser youTubeBrowser;
public GeckoWebBrowser YouTubeBrowser
{
get { return youTubeBrowser; }
set { youTubeBrowser = value; RaisePropertyChanged("YouTubeBrowser"); }
}
这是使用的属性和方法的列表:
我用了document.getElementsByTagName('video')[0].click()