6 / 6 / 2 Регистрация: 14.12.2013 Сообщений: 117 |
|
1 |
|
31.07.2014, 10:32. Показов 13899. Ответов 6
ВебБраузер делает свою работу. Вот только ошибку показывает. Можно как-то их отключить?
0 |
Mawrat 13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||
31.07.2014, 10:45 |
2 |
|||
Сообщение было отмечено KaDima281 как решение РешениеПогасить вывод диалогов с предупреждениями и сведениями об ошибках:
1 |
6 / 6 / 2 Регистрация: 14.12.2013 Сообщений: 117 |
|
31.07.2014, 10:57 [ТС] |
3 |
Спасибо. А есть какие-то аналоги вебБраузера? (Кроме TChromium)
0 |
13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
|
31.07.2014, 11:46 |
4 |
Может быть, есть. Надо поискать в сети.
0 |
Супер-модератор 32593 / 21062 / 8134 Регистрация: 22.10.2011 Сообщений: 36,335 Записей в блоге: 8 |
|
31.07.2014, 12:00 |
5 |
Mawrat, ничего нет. Mozilla забросила свой плагин, Оперы не было никогда. Только WB да Chromium
2 |
6 / 6 / 2 Регистрация: 14.12.2013 Сообщений: 117 |
|
31.07.2014, 13:51 [ТС] |
6 |
А то у меня хромиум не запускается. Теперь дельфи заново переустанавливать…
0 |
Nikita Shibaev 0 / 0 / 0 Регистрация: 28.07.2019 Сообщений: 7 |
||||||||
03.06.2021, 14:41 |
7 |
|||||||
У меня тоже была такая проблема с этим компонентом, но я решил это.
и совместным использованием этой строки со строкой
у меня решилась эта проблема.
0 |
Поставил компонент TWebBrowser
, загружаю страницу, выходит ошибка сценария. Если игнорировать ошибки путем
WB2.Silent := true;
то ошибки нет, но функционал страницы нарушен.
Как устранить данную проблему и сохранить функционал загружаемой страницы?
- delphi-7
- delphi
- javascript
- webbrowser
Kromster
13.6k12 золотых знаков43 серебряных знака72 бронзовых знака
задан 11 июн 2014 в 5:45
АлександрЪАлександрЪ
2371 серебряный знак16 бронзовых знаков
6
-
Есть подозрение, что никак. Скорее всего, что WebBrowser не поддерживает какие-то объекты или методы, которые использует сценарий.
11 июн 2014 в 6:07
-
@kot-da-vinci а есть какой-нибудь другой компонент, который может с этим справится?
11 июн 2014 в 6:40
-
Если он и есть, то я о нем не знаю. WebBrowser разрабатывался более 10 лет назад. А стандарты Web меняются со скоростью света.
11 июн 2014 в 7:00
-
Грусть( Чтож, @kot-da-vinci спасибо, буду гуглить и пытаться найти решение)
11 июн 2014 в 7:13
-
@kot-da-vinci, Вы случайно не знакомы с jsWebbrowser? Может ли он помочь выйти из данной ситуации?
13 июн 2014 в 4:21
1 ответ
ответ дан 23 мая 2017 в 7:34
microupmicroup
6654 серебряных знака18 бронзовых знаков
На чтение 8 мин. Опубликовано 15.12.2019
Я использую компоненту TWebBrowser. Встала проблема избаиться от окна «Ошибка сценария Internet Explorer». Оно появляется на многих сайтах в которых есть ошибки в JAVA скриптах. Версия IE — 5.0.
Помогите пожалуйста!
← →
Ihor Osov’yak ( 2003-01-18 22:42 ) [1]
Есть ошибка — значит будет сообщение об ошибке :-).
Зы — если кто-то посоветует Silent установить в true — не слушай его. Ибо в первых, Silent не все сообщения перехватывает — о твоем случае не знаю, нужно экспериментировать. Но проблема не в том – если даже это заблокирует сообщение об ошибке – то это будет равнозначно ответу “не выполнять скрипты более”. А как показывает опыт – сейчас очень модно на всякие линки и кнопки скрипты вешать – следовательно, броузер соотв. клики уже не будет обрабатывать. Со всеми вытекающими последствиями.
Юзание IDOCHOSTSHOWUI (пример реализации смотрим в TEmbeddedWB) тоже вряд ли (когда-то делал эксперименты – сообщения об ошибках здесь тоже не ловятся – но могу ошибиться за древностью – проверьте, если есть желанию).
Делаю так – немного в лоб, но работает наверняка (IE от 5, все винды)
— хук на создание окна для своего потока.
— в хуке смотрим класс окна, если это Internet Explorer_Server — вполне может быть, что это окно с сообщением об ошибке. Тогда – PostMessage на взвод таймера примерно на 0.1 сек – єто нужно для того, что в соотв. окне еще ничего нет. По срабатыванию таймера запрашиваем IHtmlDocument2 от соотв. хидера окна – как это сделать, здесь уже говорили, поищи по ключевым словам ObjectFromLresult,IHtmlDocument2
— парсим соотв. IHtmlDocument2, и если там есть бутончик, в html коде которого есть >
← →
crash123 ( 2003-01-19 10:29 ) [2]
Уважаемый Ihor Osov»yak, если Вас не затруднит, напишите исходный код. Заранее спосибо!
← →
Ihor Osov’yak ( 2003-01-19 11:31 ) [3]
Держи фрагменты, выдернуто с реального проекта, убраны некоторые несущественные детали, но может и не все, посему некоторые фрагменты «будут лишними», также не даю кода всякой мелочовки вида WrTm — это у меня отладочный вывод:
function GetWndClassName(aWnd:THandle):string;
var wS:string;
l:integer;
begin
SetLength(ws,160);
l:=GetClassName(aWnd,PChar(ws),length(ws));
if length(ws)>0
then Result := Copy(ws,1,l)
else Result := «»;
SetLength(ws,0);
end;
Собственно процедура хука.
notifHandle — хендл формы, в которой будем организовать клик по кнопочке, у меня это главная форма,WUM_HookIEFired- юзверовский месидж
При юзании только для своего процесса
оформлять в виде длл необязательно:
function Kah_hook(Code:integer; aWParam:WPARAM; aLParam:LParam):longint; stdcall;
var wnd: dword;
wnd :=aWParam;
fl:= 0;
if code
ну и собственно обработчик WUM_HookIEFired:
procedure TFormMain_DreamMates14_2.WUMHookIEFired(var Msg: TMessage);
begin
if Msg.WParam <> 0 then begin
fHWndHookedIEFrame := Msg.WParam;
fHWndHooked := Msg.LParam;
end
else exit;
TimerHook.Enabled := true;
И обработчик таймера(здесь основная работа) — почему через таймер — я уже говорил — нужно дать время на формирование сообщения, оно начинает формироватся даже не при создании окна, а сразу после активации (у меня такое впечатление сложилось, но в прочем на єтом я не настаиваю — в смысле, когда формируется, но что задержка нужна — это обнозначно, я ставлю 0.2 сек)
type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM:
wParam; out pObject): HRESULT; stdcall;
const MSG: Integer = 0;
hInstLib: HWND =0;
ObjectFromLresult: TObjectFromLresult = nil;
function GetIDocFromHWND(WHandle: HWND; var iDoc: IHtmlDocument2): HRESULT;
var
lRes: Cardinal;
begin
Result := S_FALSE;
if hInstLib = 0 then hInstLib := LoadLibrary(«Oleacc.dll»);
if not assigned(ObjectFromLresult) then @ObjectFromLresult := GetProcAddress(hInstLib, «ObjectFromLresult»);
if @ObjectFromLresult <> nil then begin
try
if MSG=0 then MSG := RegisterWindowMessage(«WM_HTML_GETOBJECT»);
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, iDoc);
finally
//eeLibrary(hInst);
end;
end;
end;
procedure TFormMain_DreamMates14_2.TimerHookTimer(Sender: TObject);
var
WndChild: HWND;
//IE:IWebbrowser2;
iElem:IHtmlElement;
iDoc:IHtmlDocument2;
procedure HtmlCodToLog;
begin
if not assigned(iDoc) then exit;
WrTm(2,»Hooked text:» + GetTxtBoby(iDoc));
WrTm(2,»Hooked html:» + GetHtmlBoby(iDoc));
procedure TryForceCloseHokkedWnd;
var h1,h:thandle;
begin
if fHWndHooked<>0 then begin
PostMessage(fHWndHooked,WM_Close,0,0);
exit;
end;
h1:= fHWndHookedIEFrame;
if ((h=0) or (h=Handle)) then begin
PostMessage(h1,WM_Close,0,0);
exit;
end;
h1 := h;
var s:string;
begin //
try
TimerHook.Enabled := false;
if ((fHWndHookedIEFrame<>0) and (fHWndHooked=0)) then begin
if not assigned(iDoc) then begin
WndChild := FindWindowEX(fHWndHookedIEFrame, 0, «Internet Explorer_Server», nil);
if WndChild=0 then begin
WrTm(2,»TimerHookTimer: cp1″);
WndChild := FindWindowEX(fHWndHooked, 0, «Internet Explorer_Server», nil);
end;
if WndChild=0 then begin
WrTm(2,»TimerHookTimer: cp2″);
Exit;
end;
if GetiDocFromHWND(WndChild,IDoc)<>S_OK then begin
WrTm(2,»TimerHookTimer: cp3″);
exit;
end;
end;
if not assigned(iDoc) then begin
WrTm(2,»TimerHookTimer: cp4″);
exit;
end;
WrTm(0,»** Catch window with a html-warnintg . «);
HtmlCodToLog;
if Pos(«error has occurred in the script on this page»,s)>0 then begin
iElem := GetButtonWithSubstrInOuterHtml2( >if assigned(iElem) then begin
iElem.Click;
WrTm(2,»TimerHookTimer: click on «continue running scripts»»);
exit;
end;
end;
← →
Ihor Osov’yak ( 2003-01-19 11:34 ) [4]
Да, функция постановки хука: 🙂
procedure OnHook(aHNotif:THandle);
begin
if HookHandle<>0 then exit;
notifHandle := aHNotif;
HookHandle:=SetWindowsHookEx(WH_CBT,@Kah_hook,0,GetCurrentThreadId);
← →
int64 ( 2003-01-19 12:57 ) [5]
crash123 (18.01.03 16:48)
Сделай так, и вообще никаких окон не будет. Во всяком случае, посмотри, может получится.
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
FOldWindowProc: TWndMethod;
procedure FormWndProc(var AMsg: TMessage);
< Private declarations >
public
< Public declarations >
end;
var
Form1: TForm1;
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldWindowProc:= WindowProc;
WindowProc := FormWndProc;
WebBrowser1.Navigate(«c: emp1.htm»);
end;
procedure TForm1.FormWndProc(var AMsg: TMessage);
var
ChWnd, wnd: Integer;
Msg: TWmActivate;
i: integer;
s: string;
begin
if AMsg.Msg = WM_ACTIVATE then
begin
Msg := TWmActivate(AMsg);
wnd := Msg.ActiveWindow;
//if . then
SendMessage(wnd, WM_CLOSE, 0, 0);
end;
FOldWindowProc(AMsg);
end;
А если хочешь, чтоб какое-то конкретное окно пропадало, то перед SendMessage(wnd, WM_CLOSE, 0, 0) ставь проверку на корректную идентификацию этого окна.
Ihor Osov»yak © (19.01.03 11:34)
Что-то ты много написал. Может ты практически подходил? А я вот теоритически. )
← →
Ihor Osov’yak ( 2003-01-19 13:48 ) [6]
2 int64 © (19.01.03 12:57)
> Что-то ты много написал. Может ты практически подходил? А я вот теоритически. )
Практик я, практик. 🙂
Для теоретиков повторяю: прибитие окна на взлете равнозначно тисканию на кнопочку «не выполнять более скриптов» — или как она там зовется, пишу по-памяти, что в болшинстве практических случаев ведет к нарушению функционирования сайта — сейчас часто на всякие линки и кнопки скрипты разработчики сайтов вешают.
Хотя в конкретном случае вариант от int64 пройдет. Но нужно быть готовым к тому, что через некоторое время софту доделывать придется, так как авторы сайта подпадут под модные течения и . (см. выше)
← →
Ihor Osov’yak ( 2003-01-19 13:50 ) [7]
Зы
> прибитие окна на взлете равнозначно тисканию на кнопочку
> «не выполнять более скриптов»
— сие проверялось практически и не единыжды 🙂
← →
Ihor Osov’yak ( 2003-01-19 13:57 ) [8]
Зы еще — в коде от int64 наверно есть ошибка — FormWndProc делает сабклассинг для делфийской формы и будет соотв. ловить ее активацию, а не активацию окна с сообщением с ошибкой.
Имхо, активацию окна с ошибкой — только через хуки.
Зы — на сей раз это теоритическое размышление, практически проверять влом. Но думаю, что я прав.
← →
sergey2 ( 2003-01-21 15:00 ) [9]
Я лично у себя написал:
try
WebBrowser1.Navigate(URL);
except
end;
и никаких ошибок не вылазит.
9 TipTop [2011-12-19 22:49:00]
У меня возникли проблемы с обработкой ошибок javascript в WebBrowser на Delphi 2010.
Я использую WebBrowser с включенным тихим свойством. Кажется ОК, но есть одна проблема на сайтах с багги-скриптами: она кажется частью script после того, как ошибка не выполняется. Результаты некоторых script немного отличаются от IE.
Вы знаете, как решить эту проблему?
javascript browser delphi
2 ответа
12 Решение TLama [2011-12-20 18:06:00]
В следующем примере я использовал вставленный класс, поэтому, если вы поместите этот код в свое подразделение, только эти веб-браузеры в форме или созданные в этом устройстве динамически получат это поведение.
Поставил компонент TWebBrowser , загружаю страницу, выходит ошибка сценария. Если игнорировать ошибки путем
то ошибки нет, но функционал страницы нарушен.
Как устранить данную проблему и сохранить функционал загружаемой страницы?
- 0
Ответ от
dmdel,
23 октября, 2016
-
Задать вопрос
Вопрос
-
- Поделиться
В приложении для windows использую webbrowser следующим образом,
procedure TForm13.FormCreate(Sender: TObject);
var
WindowHandle: TWinWindowHandle;
begin
WindowHandle := WindowHandleToPlatform(Handle);
FWebBrowser := TWebBrowser.Create(Self);
FWebBrowser.ParentWindow := WindowHandle.Wnd;
FWebBrowser.Width := Width;
FWebBrowser.Height := Height;
// FWebBrowser.Silent:= true;
FWebBrowser.Navigate('http://er.yamalzdrav.ru/er/categories/uncategorized/mainpage/');
end;
При отображении сайта появляется сообщение об ошибках сценария. И сайт отображается некорректно.
Как это поправить?
Ссылка на комментарий
Рекомендуемые сообщения
- 0
- Автор
-
- Поделиться
Если через браузер захожу, то таких проблем нет
Ссылка на комментарий
- 0
-
- Поделиться
Видимо ошибка javascript на самом сайте. Помню в WebBrowser в VCL было свойство silent, c помощью которого можно было отключить отображение ошибок. К сожалению, в FMX не вижу этого свойства.
Попробуйте веббраузер ChromiumFMX
Изменено 24 октября, 2016 пользователем Rusland
Ссылка на комментарий
- 0
- Автор
-
- Поделиться
59 минут назад, Rusland сказал:
Видимо ошибка javascript на самом сайте. Помню в WebBrowser в VCL было свойство silent, c помощью которого можно было отключить отображение ошибок. К сожалению, в FMX не вижу этого свойства.
Попробуйте веббраузер ChromiumFMX
Silent пробовал, ошибка не появляется, но все равно сайт отображается некорректно. Часть функционала просто не показывается.
Попробую ChromiumFMX
Ссылка на комментарий
- 0
-
- Поделиться
Так у вас VCL что ли? Тогда смотрите Хромиум для VCL (имейте в виду — их две версии dcef3 и dcef1)
Изменено 24 октября, 2016 пользователем Rusland
Ссылка на комментарий
- 0
- 0
- Автор
-
- Поделиться
Вообщем попробовал ChromiumFMX .
Скачал отсюда http://www.fmxexpress.com/web-browser-component-for-delphi-xe6-firemonkey-on-windows-and-mac-osx/
Установил компонент, скопировав файлы *.dcu в папку C:Program Files (x86)EmbarcaderoStudio15.0libwin32debug и C:Program Files (x86)EmbarcaderoStudio15.0libwin32release
Компонент установился, проект компилируется, но при запуске приложения ошибка. Вместе с установочником есть пример. Там та же ошибка. Может еще где-нибудь что нибудь не прописал или не скопировал?
Ссылка на комментарий
-
- 0
-
- Поделиться
Положите все библиотеки (*.dll) Хромиума в папку с исполняемым файлом. Плюс как минимум 2 папки с локалями и компонентами движка.
Добавил принтскрин всего того что должно лежать в папке вместе с вашим екзешником.
Это всё есть в архиве, из которого Вы устанавливали компонент в папке cef3_ChromiumXE6binWin32 (или Win64)
Изменено 25 октября, 2016 пользователем MAD_EVAL
Добавил
-
Rusland и
enatechno -
2
Ссылка на комментарий
- 0
- Автор
-
- Поделиться
7 часов назад, MAD_EVAL сказал:
Положите все библиотеки (*.dll) Хромиума в папку с исполняемым файлом. Плюс как минимум 2 папки с локалями и компонентами движка.
Спасибо! Заработало!
Ссылка на комментарий
- 0
-
- Поделиться
22 часа назад, dmdel сказал:
Спасибо! Заработало!
Не за что. Будут вопросы по хромиуму — пишите в личку
Ссылка на комментарий
Эта тема закрыта для публикации ответов.
-
Последние посетители
0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
В разработке приложений на Delphi, использующих компонент WebBrowser для отображения веб-страниц, могут возникать ошибки сценария JavaScript.
Такие ошибки могут возникать, если содержимое веб-страницы содержит ошибки в коде JavaScript или если на компьютере пользователя не установлена подходящая версия Microsoft JScript.
Для решения проблемы можно попробовать обновить версию браузера Internet Explorer или установить Microsoft JScript отдельно.
Если проблема не исчезает, можно попробовать отключить выполнение сценариев на странице, используя свойство WebBrowser.ScriptEnabled.
// пример отключения выполнения сценариев на страницеWebBrowser1.ScriptEnabled := False;
у кого ошибка сценария сюда.
Как исправить
Delphi WebBrowser
Ошибка сценария
Ошибка скрипта
Исправляем все ошибки в Windows 10 в 2 клика.
Решаем ошибку сценария[delphi-hlp.ru]