如何隐藏显示 HTML5 标记的 Web 浏览器控件 (IE) 的滚动条和窗口边框?
Posted
技术标签:
【中文标题】如何隐藏显示 HTML5 标记的 Web 浏览器控件 (IE) 的滚动条和窗口边框?【英文标题】:How to hide scrollbars and window borders for a web browser control (IE) that is displaying HTML5 markup? 【发布时间】:2016-12-22 10:21:29 【问题描述】:我有一个 MFC 对话窗口,我在其中添加了一个 web browser control(它封装了 Internet Explorer
引擎。)以下代码的目标是(暂时)从该控件中删除滚动条和窗口边框(调用 IViewObject::Draw .)
所以我这样做:
//'m_browser' = is a web browser control of type `CExplorer1`
IDispatch* phtmlDoc = m_browser.get_Document();
CComPtr<IHTMLDocument2> pHtmlDocument2;
pHtmlDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDocument2);
CComPtr<IHTMLElement> pBody;
pHtmlDocument2->get_body(&pBody);
CComPtr<IHTMLStyle> pStyle;
pBody->get_style(&pStyle);
//Remove borders
pStyle->put_borderStyle(CComBSTR("none"));
//Remove scrollbars
pBody->setAttribute(CComBSTR(L"scroll"), CComVariant(L"no"));
如果我将 Web 控件中显示的 HTML 定义为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
但如果我将其定义为 HTML5:
<!DOCTYPE HTML>
上面的代码没有做任何事情。
知道我应该改变什么以使其与 HTML5 标记一起使用吗?
【问题讨论】:
尝试在 HTML 的<head>
中添加 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
。有帮助吗?
@Steeve:谢谢。它解决了这个问题,但创造了新的(不相关的)问题。您能解释一下该设置究竟是如何影响这些 API 调用的吗?
用 0 调用 IHTMLStyle::borderWidth 怎么样?
【参考方案1】:
我正在阅读this 文章,上面写着:
Web 浏览器控件 - 默认情况下 - 永远停留在 IE 7 呈现模式。即使我们现在已经升级到 IE 11 和一个合理兼容 HTML5 的浏览器,Web 浏览器控件在默认情况下始终使用 IE 7 渲染引擎。这是因为 ActiveX 控件的原始版本使用了这种模式,并且为了向后兼容,控件继续使用这种过时且对 HTML5 非常不友好的默认设置。
解决方法是添加
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
在 HTML 的 <head>
中,强制使用最新的 IE 渲染引擎,从而使其与 HTML5 页面“兼容”。
【讨论】:
以上是关于如何隐藏显示 HTML5 标记的 Web 浏览器控件 (IE) 的滚动条和窗口边框?的主要内容,如果未能解决你的问题,请参考以下文章