100% дізнатися, що вікно TWebBrowser завантажилося
Як 100% дізнатися, що ВСІ у вікні ТВебБровзер завантажено? У тому числі і іфрейми, які можуть бути усередині сторінки.
Раніше я робив ось так у обробнику події OnDownloadComplete
var one:bool; begin one:=false; if one=true then ВСЕ ЗАВАНТАЖЕНО ELSE one:=true; end;
Але останнім часом трапляються в моїй програмі деякі глюки, які змушують сумніватися в правильності цього коду.
Може хтось підкаже як правильно? Хто стикався з аналогічним питанням?
> one:=false; > if one=true then ВСЕ ЗАВАНТАЖЕНО
Сам ти зрозумів, що ти тут понаписав?)
вибачте))) але в РІШНИК!
Видалено модераторомПримітка:Поважаємо правила
> [3] WebSQLNeederr (04.12.07 23:24)Був би я модер - забанив би. :( Сам то зрозумів що написав у [0]? Якщо наводиш код скорочений, то скорочуй правильно!!
> [3] WebSQLNeederr (04.12.07 23:24) > МЛЯ, РОЗУМНИКИ.У, швидко волоть у руки і під'їзди підмітати.
> Адже я не від куль це написав. Звичайно не "від кулі", а від великого розуму. зі знаком мінус.
> Експериментально досвідченим шляхом доведено тобою доведено? так це, судячи з наведеного коду, зовсім не є доказом.
> Якщо наводиш код скорочений, то скорочуй правильно!! в жодному разі! жодних скорочень! можна спростити програму, типу змоделювати глюк у мінімумі коду, але сюди класти як є, із програми чи моделі (і обговорювати тоді модель), але не скорочувати викладаючи сюди. на мою думку, щоб грамотно скоротити, виділивши місце з глюком, треба як мінімум уявляти де і від чого цей глюк відбувається, а якщо знає тоді навіщо запитувати? а якщо не знає то тільки "asis". або ось так і виходить не код, а купка невпорядкованих операторів (так ще потім і все навколо ламери раз не зрозуміли його "геніального". ).
> WebSQLNeederrПодвоєна "Р" наприкінці ніка звучить дуже вражаюче! Все інше - не заслуговує на увагу навіть модераторів. На жаль, ліщина давно не функціонує. :(
> можна спростити програму типу змоделювати глюк у мінімумі > коду, але сюди класти як є, з програми або моделі (і обговорювати тоді модель), але не скорочувати викладаючи сюди.Тут не можу погодитися. .
> часте явище що і пригнічує.
> Тут не можу погодитися. Не згоден? ну от і спробуй дотягнути гілку до позитивного результату, і саме тут. А то двоїстість якась у тебе в судженнях, загалом не згоден, в частковості які цю спільність складають згоден. типу з анекдота про військових "косинус кута може бути більше 5! не в цьому конкретному випадку, тут за завданням >1 до неправильного результату приведе, а взагалі може. а для наступного завдання знову не може, але взагалі."
> Вирізати з коду всяке сміття, залишивши тільки значну частину, > часте явище, і зазвичай не міщає знайти баг.
і що взагалі тоді можна порадити?
Панове, попрошу без емоцій.
Чому мораль в чомусь розбираються делфешников експонентційно прагне нескінченності? Ви помітили, що крім флуду ви "великі фахівці" слушної відповіді так і не дали.
А питання то елементарне: якимможна переконатися, що ВЕСЬ документ завантажений? Простий обробник події OnDownloadComplete не гарантує, що скажемо, якщо туди кинути showmessage("Завантажено"); то повідомлення вилетить саме коли ВЕСЬ документ завантажено. Справа в тому, що я особисто досвідченим шляхом перевіряв, що під час завантаження документа цей обробник запускається щонайменше двічі. Я зробив кілька емпіричних спостережень і дійшов висновку (як мені здається зараз помилковим), але обробник запускається рівно два рази і вже після другого запуску можна з певністю говорити, що ВЕСЬ документ завантажений. І я вас запевняю, така модель досить добре працює з прийнятною часткою похибки.
Однак, як я вже казав, в одній ситуації вилітає глюк, що в моєму випадку навіть після другого спрацювання оброблювача я візуально бачу, що ще НЕ ВСЯ сторінка завантажена.
Отже я у вас прошу поради – хто стикався з аналогічним питанням. Не вважайте за складність допомогти бідному "ламеру" розібратися. Тільки попрошу без моралі. Я розумію, що серед деяких грамотеїв Делфі є підлітки або навіть трохи старші і вони люблять самоствердитися, показавши нібито дельту в розумових здібностях його та опонента. Я попрошу таких людей знайти інше місце для задоволення своїх комплексів. Якщо сказати нічого дуже прошу проігноруйте відповідь.
Я ж звертаюся до спокійних врівноважених людей, яким не складно допомогти мені розібратися як визначити програмно, що вся сторінка документа повністю завантажена.
Наперед вдячний за ваші відгуки.
NavigateComplete2 не те?
Write an OnDocumentComplete event handler to take specific action when a frame or document is fully loaded in the web browser .For a documentwithout frames, this event occursoncewhen the document finishes loading. On document containingmultiple frames, це event occursonce for each frame. Якщо multiple-frame document finishes loading, the Web browser fires the event one final time.
Desdechado, ну це я і так емпіричним шляхом як я вже казав встановив. А який спосіб 100% дізнатися що сторінка завантажена? Адже заздалегідь я не можу знати, скільки всередині сторінки може бути іфреймів.
> Адже заздалегідь я не можу знати, скільки всередині сторінки може > бути іфреймами
А скільки вже завантажено (є на сторінці) можеш дізнатися? Якщо так алгоритм приорно такий:
FiresDocumentComplete := 0; // тільки не вбудована змінна методу, як var one:bool; у твоєму випадку :)
в обробнику OnDocumentComplete:
inc(firesDocumentComplete); if firesDocumentComplete then Exit;
//Web browser fires the event one final time. .
> [18] WebSQLNeederr (20.12.07 9:40) > А який спосіб 100% дізнатися що сторінка завантажена? > Адже заздалегідь я не можу знати, скільки всередині сторінки може > бути іфреймів.Подивитися вгору і здивуватися.
Глянула, стеля – на місці. Проте, не здивувався: (
А по темі є ще такий спосіб: if WebBrowser1.Busy означає ще завантажується.
Вдаю, що не бачу, як усі дають вигляд, що не бачать сказану мною вірну відповідь :)
>>А на тему є ще такий спосіб: if WebBrowser1.Busy означає ще завантажується.
Ти це мав на увазі? NavigateComplete2?
тобто просто за цією подією вона сповіщає, що ВСЯ сторінка завантажена?
Ах, ні схоже. Те, що може свідчити перед документом, fully downloaded, але whoc it occurs at least part of thedocument must be received and viewer for the document created.
Але в довідці я знайшов ось це: var
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin якщо CurDispatch = nil then CurDispatch := pDisp; < save for comparison > end; procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin if (pDisp = CurDispatch) then begin Beep; CurDispatch: = nil; end; end;
>>firesDocumentComplete := 0; // тільки не вбудована змінна методу, як var one:bool; у твоєму випадку :)
Ха, тож чому ви сміялися в початкових постах. Ви просто не зрозуміли ну і я помилку припустився. Зрозуміло, я не всередині методу робив var one:bool; Це ГЛОБАЛЬНА змінна!!
Тільки на мою там баг. Якщо під час звантаження сторінки натиснути скасування, WebBrowser1NavigateComplete2 вистрілить, а WebBrowser1DocumentComplete немає, і наступний WebBrowser1NavigateComplete2 не пройде перевірку, CurDispatch буде вказувати на так і не завантажений документ, і Beep; відповідно теж ніколи не наступити.
Та не з цього вони сміялися. Напевно з цього if one=true then Дельфійці завжди з цього сміються.
homm, ДЯКУЮ! Загалом ріспект тобі.
І взагалі всім велике ДЯКУЄМО що приділили увагу моїй проблемі. Тему можна закрити.
> [30] WebSqlNeederr (20.12.07 14:32)Мене нема за що, просто навчися користуватися довідкою. Ще зверни увагу на [28]. Мені здається в NavigateComplete2 потрібно прибрати перевірку та присвоювати у будь-якому випадку.
> Та не з цього вони сміялися. Напевно, над цим > if one=true then > Дельфійці завжди над цим сміються.коли перед порівнянням стоїть one:=false; живот від сміху надірвеш.