【问题标题】:How to change WebBrowser fullscreen video mode?如何更改 WebBrowser 全屏视频模式?
【发布时间】:2019-09-01 11:20:02
【问题描述】:

我有一个 c++ 项目,其中 2 个 WeBBrowserTableLayoutPanel 中,它们并排设置,工作正常,我导航正常,但是当我转到特定网站并全屏播放视频时,我的整个显示器设置为全屏而不是仅设置 WeBBrowser 本身,而是在其他网站上完美适合 WeBBrowser。有没有办法改变它显示全屏的方式?我想让它仅在WeB​Browser 中全屏显示。我认为这与Web​Browser​Base.​Active​XInstance 财产或Web​Browser.​Document 财产有关。我在互联网上找到的大多数示例都是针对旧 VB 的,与 fullscreen 属性无关。

这是一个类似的问题: WebBrowser control video element enter fullscreen

在其他示例中,我看到了一种通过以下方式提取元素的方法:

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> 标签元素,只有少数网站提供给我。为什么? c++中如何真正正确获取和操作<video>标签元素?

【问题讨论】:

  • 要查找所有 <video 标签,您可能还需要查找 <iframe><frame> 元素并回避到它们中。
  • @noseratio 谢谢我查看了<iframe><frame> 的页面源代码,但找不到它们。我想知道 Chrome 等其他浏览器如何通过检查找到它们,但是 Chrome 不会在其页面源中显示任何这些标签,只有通过检查 Chrome 浏览器上的每个元素,我才能在大量 <div>s 等下面找到 <video> 标签.,我敢打赌,浏览器的检查是通过 JavaScript 获取的,我真的需要在我的 c++ 项目中嵌入 JavaScript 吗?

标签: c++ .net winforms webbrowser-control


【解决方案1】:

然后我在输出中没有找到任何标签元素,只有少数网站提供给我。为什么?

让我做一个有根据的猜测。对于您所指的某些页面,DOM 是动态和异步构建的。这意味着,那些<video> 标签可能根本不存在。

因此,您可能需要一些异步轮询逻辑来监控 DOM 更改,特别是寻找 <video> 标记。

可能无法提出 100% 有效的解决方案来涵盖所有情况,但请查看处理此问题的 my other post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2010-10-19
    相关资源
    最近更新 更多