Програмиране на Delphi

режим
При разработването на тънък клиент, базиран на TWebBrowser, срещнах неприятна ситуация, същността на която беше неправилно показване на заредената страница в този компонент. Винаги съм мислил, че TWebBrowser използва двигателя на версията на IE, която е инсталирана в системата. В моя случай беше инсталиран IE11, в който оригиналната страница се показваше правилно и каква беше изненадата ми, когато съдържанието на страницата „изплува“ в моя клиент.

Търсенето на причината показа следното - TWebBrowser използва интерфейси от стари версии на IE! Така например в Delphi XE3 (и, изглежда, във всички по-късни версии), TWebBrowser използва интерфейсите IWebBrowser2 от IE7. По-старите версии (Delphi XE2 и по-долу) използват интерфейса от IE6 и по-долу (Delphi 7 вероятно използва интерфейса от IE4).

Ясно е, че старите версии на IE не разбират новите стандарти като CSS3, HTML5 и т.н., в крайна сметка виждаме не това, което очаквахме. Така че твърдението, че TWebBrowser използва двигателя на версията на IE, която е инсталирана в системата, не е нищо повече от мит.

Решението е да емулирате необходимата версия на IE, за което трябва да поиграете малко в системния регистър. Можете да шаманирате или на ниво цялата система, работейки с дяла HKEY_LOCAL_MACHINE (това ще изисква администраторски права), или на потребителско ниво, работейки с дяла HKEY_CURRENT_USER (не са необходими администраторски права). Освен това трябва да имате предвид дали битовостта на приложението, за което е зададен режимът на емулация, съответства на битовата стойност на операционната система. Нека да разгледаме някои примери.

В избрания раздел(и) трябва да създадете параметър тип DWORD на формуляра:

Например записът:

означава, че IE11 ще бъде емулиран за myapp.exe. Стойностите на параметрите могат да бъдатвиж тук.

СтойностОписание
11001 (0x2AF9)Уеб страниците се изобразяват в режим IE11, независимо от декларирания .
11000 (0x2AF8)Уеб страниците, съдържащи стандартни директиви, се показват в режим IE11 (който е по подразбиране за IE11).
10001 (0x2711)Уеб страниците се изобразяват в режим IE10, независимо от декларирания .
10000 (0x02710)Уеб страниците, съдържащи стандартни директиви, се показват в режим IE10 (който е по подразбиране за IE10).
9999 (0x270F)Уеб страниците се показват в режим IE9, независимо от декларирания .
9000 (0x2328)Уеб страниците, съдържащи стандартни директиви, се показват в режим IE9 (който е по подразбиране за IE9).Важно: В IE10 уеб страниците, съдържащи стандартни директиви, се показват в режим IE10.
8888 (0x22B8)Уеб страниците се изобразяват в режим IE8, независимо от декларирания .
8000 (0x1F40)Уеб страниците, съдържащи стандартни директиви, се показват в режим IE8 (който е по подразбиране за IE8).Важно: В IE10 уеб страниците, съдържащи стандартни директиви, се изобразяват в стандартен режим на IE10.
7000 (0x1B58)Уеб страниците, които съдържат стандартни директиви, се изобразяват в режим IE7 (който е по подразбиране за приложения, които съдържат контролата WebBrowser).
Какво друго трябва да имам предвид?

  • Минималната версия на IE, за която е възможна емулация, е IE 8. Следователно на Windows XP / Server 2003 трябва да инсталирате IE 8 (максималната версия на IE, която можете да инсталиратена по-„древна“ ОС - IE8);
  • В Windows 7 и по-нова версия можете да инсталирате IE 11. За да използвате емулация на IE 11, тя (IE11) трябва да бъде инсталирана на системата.
Следователно, преди да зададете режим на емулация, трябва да определите версията на операционната система и инсталирания IE (въз основа на тази информация можете да разберете кои версии на IE могат да бъдат емулирани).

Всичко по-горе обаче не гарантира липсата на проблеми при показване на съдържание в емулираната версия на IE. Така че може да има проблеми, свързани с рисуването върху платното директно в браузъра, бъдете подготвени за това.