Как да накарам TWebBrowser в Delphi XE2 да работи?

Компонентът TWebBrowser в Delphi XE2 изглежда има сериозни грешки. Има ли някакъв код, който трябва да стартирам, за да го инстанцирам по някакъв специален начин?

  1. Създайте нов Delphi проект
  2. Пуснете компонент TWebBrowser върху формуляра.
  3. Във Form1.FormCreate() извикайте WebBrowser1.GoHome (към google).

Ако компилирам този 32-битов и отида на някои конкретни уеб страници, получавам съобщения за грешка. google (ncbi nucleotide blast) и щракнете върху първата връзка.

В допълнение към тези грешки в JavaScript, ако щракна върху връзка, която обикновено се отваря в нов прозорец, тя се отваря в IE (отделно приложение).

64-битовата версия изглежда още по-счупена. Отивайки на същия сайт (ncbi nucleotide blast) получавам срив на цялата програма поради грешка „divide_by_zero“.


person Daisetsu    schedule 08.04.2013    source източник
comment
TWebBrowser е просто обвивка и тези грешки не се генерират от Delphi. За да избегнете това изскачащи прозорци, задайте TWebBrowser.Silent := True   -  person Sir Rufo    schedule 09.04.2013
comment
Ако имах по една стотинка всеки път, когато видя някой да пита това... щях да имам много стотинки.   -  person Jerry Dodge    schedule 09.04.2013
comment
@Sir Rufo Добавянето на .silent се отърва от JS грешките.   -  person Daisetsu    schedule 09.04.2013


Отговори (1)


По отношение на изключенията с плаваща запетая, TWebBrowser очаква да работи с маскирани изключения с плаваща запетая. Изглежда, че използвате настройките по подразбиране на Delphi с плаваща запетая и имате демаскирани изключения. Подозирам, че ако маскирате изключенията, проблемите ви ще изчезнат.

Направете го така:

SetExceptionMask(exAllArithmeticExceptions);

И както казаха други, вие заглушавате изскачащите прозорци на Javascript, като зададете Silent на True.

person David Heffernan    schedule 08.04.2013
comment
Здравей Дейвид, виждал съм това. stackoverflow.com/questions/9359223 /, но наистина не го разбрах. - person Daisetsu; 09.04.2013
comment
какво не разбираш - person David Heffernan; 09.04.2013
comment
Опитах System.Set8087CW($133f); и $1F80 // Деактивиране на всички fpu изключения. Но все още получавам абсолютно същата грешка. Както SetSSEExceptionMask(exAllArithmeticExceptions), така и SetFPUExceptionMask(exAllArithmeticExceptions) не се компилират дори след импортиране на System.math. - person Daisetsu; 09.04.2013
comment
Компилираш ли за 64 бита? - person David Heffernan; 09.04.2013
comment
Тогава не е добра настройка 8087CW, тъй като тя не се използва. Трябва да контролирате модула SSE. SetMXCSR($1F80) - person David Heffernan; 09.04.2013
comment
Това напълно го оправи! Сега ако можех само да разбера как да попреча на връзките да отварят нови прозорци в отделен процес на IE. - person Daisetsu; 09.04.2013
comment
FWIW, SetExceptionMask(exAllArithmeticExceptions) работи добре тук - person David Heffernan; 09.04.2013