vimp-engine 0.35.1 → 0.35.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vimp-engine",
3
- "version": "0.35.1",
3
+ "version": "0.35.2",
4
4
  "description": "VIMP — движок-приложение (мастер, P2P-транспорт, Worker-хост, мета, MVC-каркас клиента)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -417,6 +417,7 @@ export function createDiagnostics({
417
417
  * @returns {Function} снятие перехватчиков
418
418
  */
419
419
  function install(target = window) {
420
+ const doc = target.document;
420
421
  // ошибки загрузки <img>/<script> приходят обычным Event на элементе —
421
422
  // это сбои ресурсов, а не исключения
422
423
  const onError = event => {
@@ -428,7 +429,14 @@ export function createDiagnostics({
428
429
  capture(event.reason, { kind: 'rejection' });
429
430
  };
430
431
  const onPageHide = () => flush();
431
- const doc = target.document;
432
+ // фоновую вкладку мобильный браузер убивает и без pagehide: скрытие —
433
+ // последний надёжный момент отправить накопленное (по таймеру отчёты
434
+ // ждут до minIntervalMs)
435
+ const onVisibility = () => {
436
+ if (doc?.visibilityState === 'hidden') {
437
+ flush();
438
+ }
439
+ };
432
440
 
433
441
  try {
434
442
  target.addEventListener('error', onError);
@@ -436,6 +444,7 @@ export function createDiagnostics({
436
444
  target.addEventListener('pagehide', onPageHide);
437
445
  // событие всплывает к документу
438
446
  doc?.addEventListener('securitypolicyviolation', reportCsp);
447
+ doc?.addEventListener('visibilitychange', onVisibility);
439
448
  } catch {
440
449
  // нет цели — просто не ловим
441
450
  }
@@ -446,6 +455,7 @@ export function createDiagnostics({
446
455
  target.removeEventListener('unhandledrejection', onRejection);
447
456
  target.removeEventListener('pagehide', onPageHide);
448
457
  doc?.removeEventListener('securitypolicyviolation', reportCsp);
458
+ doc?.removeEventListener('visibilitychange', onVisibility);
449
459
  } catch {
450
460
  // снятие не должно ронять вызывающего
451
461
  }