有人尝试在运行时创建和销毁TWebBrowser,并使用FEATURE_BROWSER_EMULATION在重新创建TWebBrowser之前切换浏览器模式,以实现在不重启应用程序的情况下切换模式吗?
我想知道这个设置是只在启动应用程序时读取还是在创建Web浏览器控件时读取。
我想知道这个设置是只在启动应用程序时读取还是在创建Web浏览器控件时读取。
您不需要自己创建或销毁TEmbeddedWB。我制作了以下代码,以便为应用程序设置正确的IE版本。它运行得非常完美。您必须在创建表单之前执行此操作。例如,您可以在初始化语句中执行此操作:
TIEMode = (iemUnknown, iemIE7, iemIE8, iemIE9, iemIE10);
// iemUnknown, don't use this as parameter, return result only
// iemIE10: To run a WebBrowser control in IE10 Standards Mode
// iemIE9: To run a WebBrowser control in IE9 Standards Mode
// iemIE8: To run a WebBrowser control in IE8 Standards Mode
// iemIE7: To run in IE7 Standards Mode
function embeddedWebbrowserMode(bSet : Boolean; Mode: TIEMode; AppName: string = '') : LongInt;
const
REG_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
var
Reg: TRegistry;
Value: LongInt;
i : LongInt;
begin
Result:=0;
if( bSet ) and ( Mode = iemUnknown ) then
Exit;
if AppName = '' then
AppName := ExtractFileName(Application.ExeName);
if( bSet ) then
case Mode of
iemIE7 : Value := 7000;
iemIE8 : Value := 8888;
iemIE9 : Value:=9999;
else Value:=10001; // IE10 standards mode
end
else Value:=0;
Reg:=nil;
try
Reg := TRegistry.Create();
Reg.RootKey := HKEY_CURRENT_USER;
if( Reg.OpenKey(REG_KEY, True) ) then
begin
if( bSet ) then
begin
Reg.WriteInteger(AppName, Value);
Result:=Value;
end
else Value:=Reg.ReadInteger( AppName );
Reg.CloseKey;
end;
except;
end;
if( Assigned( Reg )) then
FreeAndNil(Reg);
if( NOT bSet ) and ( Value > 0 ) then
begin
i:=Value div 1000;
if( i >= 7 ) and ( i <= 10 ) then
begin
case i of
7000 : Result:=Byte(iemIE7);
8888 : Result:=Byte(iemIE8);
9999 : Result:=Byte(iemIE9);
10001 : Result:=Byte(iemIE10);
else begin
if( i >=10 ) then
Result:=Byte(iemIE10);
end;
end;
end;
end;
end;
function setEmbeddedWebbrowserMode(Mode: TIEMode; AppName: string = '') : boolean;
begin
Result:=( embeddedWebbrowserMode(TRUE, Mode, AppName ) > 0 );
end;
function getEmbeddedWebbrowserMode( AppName: string = '' ) : TIEMode;
begin
Result:= TIEMode( Byte( embeddedWebbrowserMode(FALSE, iemUnknown, AppName )));
end;
使用示例:
initialization
setEmbeddedWebbrowserMode( iemIE9 );
我尝试了一下,但没起作用。
这是我做的:
HKCU\Software\Microsoft\Internet
Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
,以强制使用版本9(为我的exe名称添加了9999)因此似乎您需要重新启动应用程序。