Как воспроизвести встроенный YouTube (используя браузер Gecko) впервые с c# по javascript? - PullRequest
0 голосов
/ 27 января 2020

В настоящее время я создаю приложение WPF, и браузер Gecko перешел на встроенное видео на YouTube (www.youtube.com/embed/YId_6G-YLpQ).

До сих пор мне удалось выполнить следующие команды javascript:

  1. Воспроизвести приостановленное видео, используя:

документ .getElementsByTagName ('video') [0] .play ()

Приостановить видео, используя:

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

Однако я не смог выяснить, как я могу начать видео в самый первый раз. Использование метода воспроизведения не работает. Мне нужно запустить его через код, а не через физический щелчок, так как он вызовет таймер отправки, который будет часто вызывать измененное свойство, чтобы вернуть текущее время видео.

Пока у меня есть несколько грязных подходов просто чтобы получить:

Ручной

  1. Я вручную нажимаю кнопку воспроизведения (щелкая по ней мышью)
  2. Пауза видео (используя кнопку wpf с методом паузы)
  3. Перетащите ползунок времени назад от начала видео
  4. Воспроизведите видео (используя кнопку wpf с методом воспроизведения)

Это не совсем так, как я хотел, но при условии, что я не меняю видео, я должен сделать это только один раз.

Полуавтомат

  1. Создайте переменную с именем 'youTubeVideoHasStarted'
  2. Метод воспроизведения видео делает if на 'youTubeVideoHasStarted', если true = воспроизводить видео, если false = выполнять симулированный щелчок левой кнопкой мыши на YouTube видео (я, вероятно, нас Здесь можно просмотреть и просто разделить высоту и ширину, чтобы получить клик на видео в мертвой точке), затем установить 'youTubeVideoHasStarted = true' и сбросить последнее, если ссылка была изменена

Вот мой код для справки

    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

1 Ответ

0 голосов
/ 27 января 2020

Я использовал document.getElementsByTagName('video')[0].click()

...