У меня есть проект С++ с 2 WeBBrowser
в TableLayoutPanel
, они установлены рядом, он работает нормально, я перемещаюсь нормально, но когда я захожу на определенные веб-сайты и воспроизводю видео в полноэкранном режиме, это переводит весь мой монитор в полноэкранный режим, а не устанавливает только WeBBrowser
себя, однако на других веб-сайтах, которые идеально вписываются в WeBBrowser
. Есть ли способ изменить способ отображения в полноэкранном режиме? Я хочу, чтобы он отображался в полноэкранном режиме только в WeBBrowser
. Я думаю, это как-то связано с WebBrowserBase.ActiveXInstance
Собственностью или WebBrowser.Document
Собственностью. Большинство примеров, которые я нашел в Интернете, относятся к старому VB и не связаны с полноэкранным свойством.
Вот аналогичный вопрос: Видео элемент управления WebBrowser входит в полноэкранный режим
В других примерах я видел метод извлечения элемента, выполнив:
HtmlElement^ object = webBrowser1->Document->GetElementById("video");
Но я понятия не имею, как обрабатывать этот код, чтобы отформатировать это видео, а затем вернуть его в WeBBrowser
с исправленным полноэкранным режимом.
Обновлено:
Я пошел дальше и смог получить элемент <video>
только с нескольких сайтов, вот мой метод:
private: System::Void webBrowser1_DocumentCompleted(System::Object^ sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^ e) {
HtmlElementCollection^ videoElements = webBrowser1->Document->GetElementsByTagName("video");
videoElements[0]->SetAttribute("style", "width: 640px; height: 480px;"); //Not sure if this is a proper way to set an attribute in this element.
}
Проблема в том, что не каждый веб-сайт дает вам доступ к элементам тега <video>
, поэтому для этих веб-сайтов я сделал следующий код, чтобы убедиться, что в исходном коде действительно нет элементов тега <video>
:
System::Diagnostics::Debug::Write(webBrowser1->DocumentText);
Затем я не нашел ни одного элемента тега <video>
в выводе, только несколько веб-сайтов предоставляют мне это. Почему? Как правильно получить элементы тега <video>
и манипулировать ими в С++?
@noseratio Спасибо, я искал в источнике страницы <iframe>
и <frame>
, но не смог их найти. Интересно, как другие браузеры, такие как Chrome, могут найти их путем проверки, однако Chrome не показывает ни один из этих тегов в исходном коде своей страницы, только проверяя каждый элемент в браузере Chrome, я могу найти теги <video>
под множеством тегов <div>
и т. д., я уверен проверка из браузеров получает их с помощью JavaScript, действительно ли мне нужно встраивать JavaScript в мой проект C++?
Then I didn't find any tag element in the output, only a few websites provide me that. Why?
Позвольте мне сделать обоснованное предположение. Для некоторых страниц, на которые вы ссылаетесь, DOM строится динамически и асинхронно. Это означает, что этих тегов <video>
может просто еще не быть.
Таким образом, вам может понадобиться некоторая асинхронная логика опроса, которая отслеживает изменения DOM, в частности, ищет теги <video>
.
Возможно, не удастся найти 100% работающее решение для всех случаев, но взгляните на мой другой пост, который занимается этой проблемой.
Чтобы найти все теги
<video
, вам также может понадобиться найти элементы<iframe>
и<frame>
и отклонить их.