我正在尝试从TWebBrowser中删除滚动条和边框。我发现了大量对以下代码的引用,并且在www.google.com上使用时效果很好:
// Switch off scrollbars
WB.OleObject.document.body.style.overflowX := 'hidden';
WB.OleObject.document.body.style.overflowY := 'hidden';
// Switch off borders
WB.OleObject.document.body.style.borderstyle := 'none';
但是,使用ASP.NET生成的网页,它不再有效。
这是ASP.NET aspx代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test</title>
</head>
<body bgcolor="#333333" border="0">
<form id="form1" runat="server">
<table style="width:100%;">
<tr>
<td class="style7">
<asp:Label ID="Label2" runat="server" Font-Names="Arial" Font-Size="21pt"
ForeColor="#F2F2F2" Text="Test"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</html>
...这是ASP.NET应用程序生成的HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
Test
</title></head>
<body bgcolor="#333333" border="0">
<form method="post" action="Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJODExMDE5NzY5ZGSKCPuFcF0SPBHrn5HUkzHPVjgZoCXwtqbgbPjoAyOPAQ==" />
</div>
<table style="width:100%;">
<tr>
<td class="style7">
<span id="Label2" style="color:#F2F2F2;font-family:Arial;font-size:21pt;">Test</span>
</td>
</tr>
</table>
</form>
</body>
</html>
知道为什么滚动条/边框仍然可见?
答案 0 :(得分:2)
正如你之前说的那样,并且你已经放置了一个标签internet-explorer-11
,我认为问题或多或少与页面呈现策略有关。所以解决方案可能是FEATURE_BROWSER_EMULATION
。你能确认只有MSIE11会出现问题吗?
如果是FEATURE_BROWSER_EMULATION
,您应该在注册表中添加一个条目,并将应用程序名称作为键。该值应该是相应的仿真标志。为了更好地排除故障,请粘贴相关代码。
以下是我经过验证的代码,可以更改应用程序的呈现策略。你可以尝试一下。
const
BROWSER_EMULATION_MSIE11_FORCED = 11001;
BROWSER_EMULATION_MSIE11 = 11000; // currently this is the best rendering engine we can have
BROWSER_EMULATION_MSIE10_FORCED = 10001;
BROWSER_EMULATION_MSIE10 = 10000;
BROWSER_EMULATION_MSIE9_FORCED = 9999;
BROWSER_EMULATION_MSIE9 = 9000;
BROWSER_EMULATION_MSIE8_FORCED = 8888;
BROWSER_EMULATION_MSIE8 = 8000;
BROWSER_EMULATION_MSIE7 = 7000;
procedure SetBrowserEmulation(Value: Integer; const ExeName: string);
begin
ChangeFeatureControlRegValue('FEATURE_BROWSER_EMULATION', ExeName, Value);
end;
procedure ChangeFeatureControlRegValue(const Feature, ExeName: string; Value: Integer);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
if Reg.OpenKey('\Software\Microsoft\Internet Explorer\Main\FeatureControl\' + Feature, {CanCreate=}True) then
begin
try
Reg.WriteInteger(ExeName, Emulation);
finally
Reg.CloseKey;
end;
end;
finally
Reg.Free;
end;
end;
作为小型促销,您可以使用我的dutil.sys.win32.registry.Writer来简化整个注册表访问的内容。
procedure ChangeFeatureControlRegValue(const Feature, ExeName: string; Value: Integer);
begin
TWriter.WriteUInt('\Software\Microsoft\Internet Explorer\Main\FeatureControl\' + Feature, ExeName, Value);
end;
另一种方法是覆盖浏览器行为。您是否尝试过实施IDocHostUIHandler
和override IDocHostUIHandler::GetHostInfo
。如果您尝试过着名的TEmbeddedWB
组件,则可以找到有关如何实现IDocHostUIHandler
的演示代码。关键是要将pInfo.dwFlags
设置为包含标记DOCHOSTUIFLAG_SCROLL_NO
。