无法删除TWebBrowser的边框和滚动条?

时间:2014-08-28 14:42:58

标签: asp.net delphi internet-explorer-11 twebbrowser delphi-xe6

我正在尝试从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>

知道为什么滚动条/边框仍然可见?

1 个答案:

答案 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;

另一种方法

另一种方法是覆盖浏览器行为。您是否尝试过实施IDocHostUIHandleroverride IDocHostUIHandler::GetHostInfo。如果您尝试过着名的TEmbeddedWB组件,则可以找到有关如何实现IDocHostUIHandler的演示代码。关键是要将pInfo.dwFlags设置为包含标记DOCHOSTUIFLAG_SCROLL_NO