2011-06-30 8 views
3

実行時にTWebBrowserを作成して破棄し、TWebBrowserを再作成する前にFEATURE_BROWSER_EMULATIONを使用してブラウザモードを切り替えて、アプリケーションを再起動せずにモードを切り替えることを試みたことがありますか?実行時にTWebBrowserとFEATURE_BROWSER_EMULATION

設定をアプリケーションの起動時にのみ読み込んだのか、Webブラウザコントロールを作成したのか不思議です。

答えて

3

私は試しても機能しませんでした。

これは私がやったことです:

作成さ
  1. と現在のユーザーエージェントを表示する負荷のWebページ 既存TWebBrowserでアプリケーションを開始 - それはMSIE 7.0は、(インストール表示は9.0、そう 互換モードでありますまだ 私はバージョン9の 使用を強制するためにHKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONにアプリケーションを追加して実行中に埋め込まれたコントロールのためにまだ私力学を実行している
  2. (私のexeファイル名のために9999を追加しました))
  3. ので蹴らLY TWebBrowserを作成し、ステップ1と同じWebページをロードした - しかし、ユーザエージェント はまだMSIE 7.0
  4. を示したアプリケーションを再起動した後、ユーザー エージェントが始まり

から9.0だったので、それはあなたのように思えますアプリケーションを再起動する必要があります。

5

あなた自身で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; 

例それを使用する方法:

モードのみの低いバージョンを持っているマシン上のIE 10に設定されている場合はどうなりますか
initialization 
setEmbeddedWebbrowserMode(iemIE9); 
+0

Internet Explorerがインストールされていますか? –

+0

私は(テストされていない)最新の最新のインストールされたバージョンとデフォルトモードに切り替えると思います。だからie9を選択した場合はie9が選択されますが、ie8の場合はie8になります。 – Codebeat

関連する問題