Как запустить TWebBrowser в Delphi XE2?

Компонент TWebBrowser в Delphi XE2 содержит серьезные ошибки. Есть ли какой-то код, который мне нужно запустить, чтобы создать его особым образом?

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

Если я скомпилирую эту 32-битную версию и перейду на некоторые определенные веб-страницы, я получу сообщения об ошибках. Google (ncbi нуклеотидный взрыв) и нажмите на первую ссылку.

В дополнение к этим ошибкам javascript, если я нажимаю ссылку, которая обычно открывается в новом окне, она открывается в IE (отдельное приложение).

64-битная версия кажется еще более сломанной. Зайдя на тот же сайт (взрыв нуклеотидов ncbi), я получаю сбой всей программы из-за ошибки «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