如何通过 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 命令完成了以下操作:

  1. 使用以下方式播放暂停的视频:

document.getElementsByTagName('video')[0].play()

  1. 暂停视频使用:

document.getElementsByTagName('video')[0].pause()

但是,我不知道如何在第一次开始播放视频。使用播放方法不起作用。我需要通过代码 运行 它而不是通过物理点击,因为它会触发调度计时器,该计时器会频繁地提高 属性 更改为 return 当前视频时间。

到目前为止,我有一些肮脏的方法只是为了度过难关:

手动

  1. 我手动按下播放按钮(用鼠标点击它)
  2. 暂停视频(使用带有暂停方法的 wpf 按钮)
  3. 将时间滑块从视频开头一直拖到后面
  4. 播放视频(使用 wpf 按钮和播放方法)

它并没有像我希望的那样无缝,但如果我不更改视频,我只需要做一次。

半手动

  1. 创建一个名为 'youTubeVideoHasStarted'
  2. 的变量
  3. 播放视频方法在 '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"); }
    }

这是使用的属性和方法的列表:

https://www.w3schools.com/tags/ref_av_dom.asp

我用了document.getElementsByTagName('video')[0].click()