[Pas2js] page reload when server restarted not 100% reliable
Michael Van Canneyt
michael at freepascal.org
Tue Sep 23 09:46:30 CEST 2025
On Tue, 23 Sep 2025, Luca Olivetti via Pas2js wrote:
> El 22/9/25 a les 18:44, Luca Olivetti via Pas2js ha escrit:
>> El 22/9/25 a les 18:33, Michael Van Canneyt ha escrit:
>>
>>>> I'd like the exception to be propagated to the outer code so my
>>>> try..catch would work.
>>>
>>> Did you try putting the above in the load ?
>>>
>>> window.addEventListener("load", function () {
>>> if (typeof rtl === 'undefined' || typeof QRCode === 'undefined') {
>>> console.log('rtl o QRCode no definidos, recargo pagina');
>>> setTimeout(function() { location.reload(); }, 5000);
>>> } else {
>>> try {
>>> rtl.run();
>>> } catch(err) {
>>> console.log('error '+err.message+', recargo pagina');
>>> setTimeout(function() { location.reload(); }, 5000);
>>> }
>>> }
>>> });
>>
>> Again, I'm not 100% sure but I think I tried everything at the time.
>> In any case in the scenario I described It shouldn't make a difference:
>> something is showing the exception instead of being propagated to my
>> try..catch block.
>>
>
> The "trick" is to catch the exception inside the pas2js application,
> since TBrowserApplication.OnException doesn't handle the exception, I
> had to override the ShowException method.
>
> procedure TMyApplication.ShowException(E: Exception);
> Var
> S : String;
> T : TTimer;
>
> begin
> if (E<>nil) then
> S:=E.ClassName+': '+E.Message
> else if ExceptObjectJS then
> S:=TJSObject(ExceptObjectJS).toString;
> S:='Unhandled exception caught: '+S;
> Console.Log(s);
> //ha llegado a inicializar
> if Assigned(errorScreen) then
> showErrorScreen(S);
> T:=TTimer.Create(nil);
> T.Interval:=5000;
> T.OnTimer:=@reconnect;
> T.Enabled:=true;
> end;
>
>
> Now I'll have to decide if I still have to check for rtl === 'undefined'
If rtl is undefined, then there will be no TMyApplication ?
Michael.
More information about the Pas2js
mailing list