ChromiumWebBrowser - 如何将高度设置为 HTML 文档高度

ChromiumWebBrowser - how to set height to HTML doc height

提问人:user2111255 提问时间:6/28/2022 更新时间:6/28/2022 访问量:484

问:

我的应用程序中托管了一个chromiumWebBrowser。 用户可以在 HTML 页面之间导航(使用 Binging To Address)。

我需要 xaml 滚动条(不是 css),所以我有一个 scrollViewer 和 Chromium 浏览器。

每次地址更改时,chromium 高度都需要是完整的 html 文档高度,才能正确滚动。

我尝试将其设置为类似于此 Q 中的答案:cefSharp ChromiumWebBrowser 大小到页面内容

第一次效果很好,但是在导航时,它只会增长 - 如果第一页是 600,下一页是 200 - 它也会返回 600 秒。

XAML:

 <ScrollViewer x:Name="scroller"    >
            <wpf:ChromiumWebBrowser x:Name="chrome" 
                                Address="{Binding CurrentUrl}"  />
 </ScrollViewer>

C#:

chrome.LoadingStateChanged += async (s, e) =>
        {
            if (!e.IsLoading) // browser.CanExecuteJavascriptInMainFrame == TRUE !
            {
                JavascriptResponse response =
                    await chrome.EvaluateScriptAsync(
                        // GET HEIGHT OF CONTENT
                        $"(function()                     " +
                        "{  var _docHeight =                  " +
                        "    document.documentElement.scrollHeight;     " +
                        "                                    " +
                        "  return _docHeight;                " +
                        "}                                   " +
                        ")();");

                int docHeight = (int)response.Result;
                chrome.Dispatcher.Invoke(() => { chrome.Height = docHeight; });
            }
        };
html wpf xaml cefsharp

评论

0赞 amaitland 6/28/2022
尝试使用 cefsharp.github.io/api/102.0.x/html/...来获取内容大小,请确保等待该方法。
0赞 user2111255 6/28/2022
@amaitland谢谢,但它有同样的问题。第一页是 200 页,第二页是 400 页,第三页应该是 200 页,但仍然是 400 页......
0赞 user2111255 6/28/2022
我在 chrome devTools 中看到相同的行为 - 您设置尺寸,然后打开另一个选项卡或浏览 - 尺寸不会重置。知道如何重置Chrome的尺寸吗?
0赞 amaitland 6/29/2022
您是否正在处理响应式设计?网站自适应调整大小以填充空间的情况并不少见。我建议更新您的标签以包含 JavaScript,因为它比 xaml 更相关。我没有时间研究这个。
0赞 amaitland 7/1/2022
cefsharp.github.io/api/102.0.x/html/......也许值得测试,您需要显式启用自动调整大小。cefsharp.github.io/api/102.0.x/html/......创建一个继承自 DisplayHandler 的类并重写该方法,将一个新实例分配给浏览器 DisplayHandler 属性。我不知道在这种情况下是否有效,值得一试。

答: 暂无答案