Как запустить компонент Delphi TWebbrowser в режиме IE9?
Я испытываю ошибки Javascript в TWebbrowser из-за того, что TWebbrowser работает в режиме совместимости с IE7.
Есть ли способ предотвратить это и просто запустить его в режиме IE9?
2 ответа
- Включите функцию эмуляции браузера, используя документированный раздел реестра.
- В зависимости от выбранной вами настройки эмуляции браузера вам может потребоваться, чтобы ваш документ содержал подходящий DOCTYPE. Опять же, это описано в документации.
Так, например, если вы хотите внести самое простое изменение, вы бы добавили следующий параметр реестра:
HKEY_LOCAL_MACHINE (или HKEY_CURRENT_USER) ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Microsoft Internet Explorer Главный FeatureControl FEATURE_BROWSER_EMULATION YourExeNameGoesHere.exe = (DWORD) 00009999
Документация по стоимости 9999
говорит:
9999 Windows Internet Explorer 9. Веб-страницы отображаются в режиме стандартов IE9 независимо от директивы!DOCTYPE.
Вы были использовать 9000
тогда вам также необходимо изменить DOCTYPE вашего документа:
9000 Internet Explorer 9. Веб-страницы, содержащие основанные на стандартах директивы!DOCTYPE, отображаются в режиме IE9. Значение по умолчанию для Internet Explorer 9.
Связанная документация также включает информацию, необходимую для указания других версий IE.
Добавьте этот класс в свой код:
type TBrowserEmulationAdjuster = class
private
class function GetExeName(): String; inline;
public const
// Quelle: https://msdn.microsoft.com/library/ee330730.aspx, Stand: 2017-04-26
IE11_default = 11000;
IE11_Quirks = 11001;
IE10_force = 10001;
IE10_default = 10000;
IE9_Quirks = 9999;
IE9_default = 9000;
/// <summary>
/// Webpages containing standards-based !DOCTYPE directives are displayed in IE7
/// Standards mode. Default value for applications hosting the WebBrowser Control.
/// </summary>
IE7_embedded = 7000;
public
class procedure SetBrowserEmulationDWORD(const value: DWORD);
end platform;
class function TBrowserEmulationAdjuster.GetExeName(): String;
begin
Result := TPath.GetFileName( ParamStr(0) );
end;
class procedure TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(const value: DWORD);
const registryPath = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
var
registry: TRegistry;
exeName: String;
begin
exeName := GetExeName();
registry := TRegistry.Create(KEY_SET_VALUE);
try
registry.RootKey := HKEY_CURRENT_USER;
Win32Check( registry.OpenKey(registryPath, True) );
registry.WriteInteger(exeName, value)
finally
registry.Destroy();
end;
конец;
Затем добавьте в свой OnCreate формы:
TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(TBrowserEmulationAdjuster.IE11_Quirks);
Это все навсегда
Включить в html, " http-эквивалент ="X-UA-совместимый "контент ="IE= край "
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body>
your code ....
</body>
</html>