有沒有人試圖在運行時創建和銷燬TWebBrowser,並在重新創建TWebBrowser之前使用FEATURE_BROWSER_EMULATION切換瀏覽器模式,以便在不重新啓動應用程序的情況下切換模式?TWebBrowser和FEATURE_BROWSER_EMULATION在運行時
我想知道設置是否只在啓動應用程序或者當瀏覽器控件被創建時才被讀取。
有沒有人試圖在運行時創建和銷燬TWebBrowser,並在重新創建TWebBrowser之前使用FEATURE_BROWSER_EMULATION切換瀏覽器模式,以便在不重新啓動應用程序的情況下切換模式?TWebBrowser和FEATURE_BROWSER_EMULATION在運行時
我想知道設置是否只在啓動應用程序或者當瀏覽器控件被創建時才被讀取。
我試過了,它沒有工作。
這是我做過什麼:
HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
強制 使用的版本9(9999加爲我的exe文件名)所以它看起來像你將不得不重新啓動應用程序。
您不需要自己創建或銷燬一個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);
如果將模式設置爲IE 10的機器上會發生什麼事,只有具有較低版本Internet Explorer安裝? –
我認爲(未測試)它會切換回最新的最新安裝版本和默認模式。所以,如果你有ie9它選擇ie9,但是當你有ie8它將是ie8。 – Codebeat