{"record":{"id":"994acd4f6883e75c","repo":"lutzroeder/netron","slug":"please-update-your-browser-to-use-this-application","errorCode":null,"errorMessage":"Please update your browser to use this application.","messagePattern":"Please update your browser to use this application\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"source/index.js","lineNumber":98,"sourceCode":"        /* eslint-disable no-unused-vars */\n        try {\n            window.__view__.show('welcome message');\n        } catch (error) {\n            // continue regardless of error\n        }\n        /* eslint-enable no-unused-vars */\n    }\n};\n\nwindow.addEventListener('error', function (event) {\n    var error = event instanceof window.ErrorEvent && event.error && event.error instanceof Error ? event.error : new Error(event && event.message ? event.message : JSON.stringify(event));\n    window.exports.terminate(error.message);\n});\n\nwindow.addEventListener('load', function() {\n    if (typeof Symbol !== 'function' || typeof Symbol.asyncIterator !== 'symbol' ||\n        typeof BigInt !== 'function' || typeof BigInt.asIntN !== 'function' || typeof BigInt.asUintN !== 'function' || typeof DataView.prototype.getBigInt64 !== 'function') {\n        throw new Error('Please update your browser to use this application.');\n    }\n    var ua = window.navigator.userAgent;\n    var chrome = ua.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n    var safari = ua.match(/Version\\/(\\d+)\\.(\\d+).*Safari/);\n    var firefox = ua.match(/Firefox\\/([0-9]+)\\./);\n    if ((Array.isArray(chrome) && parseInt(chrome[2], 10) < 86) ||\n        (Array.isArray(safari) && (parseInt(safari[1], 10) < 16 || (parseInt(safari[1], 10) === 16 && parseInt(safari[2], 10) < 4))) ||\n        (Array.isArray(firefox) && parseInt(firefox[1], 10) < 114)) {\n        throw new Error('Please update your browser to use this application.');\n    }\n    window.exports.preload(function(value, error) {\n        if (error) {\n            window.exports.terminate(error.message);\n        } else {\n            var host = new window.exports.browser.Host();\n            window.__view__ = new window.exports.view.View(host);\n            window.__view__.start();\n        }","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/lutzroeder/netron/blob/d8a543f5f847ef596aa58858d6adcf5d75545f7f/source/index.js#L80-L116","documentation":"On page load the application feature-detects the JavaScript runtime and refuses to run if Symbol.asyncIterator, BigInt, BigInt.asIntN/asUintN, or DataView.prototype.getBigInt64 are missing. These are hard requirements: the HDF5 reader stores 64-bit sizes/addresses as BigInt and iterates streams asynchronously, so a browser without them cannot load files correctly.","triggerScenarios":"Loading the app in a legacy browser (roughly pre-2019 engines): old Safari, old Chrome/Edge (pre-Chromium Edge), IE11, or embedded WebViews/older in-app browsers. The check is a typeof probe, so it fires before any HDF5 API is called.","commonSituations":"Corporate environments with pinned old browsers, older iOS/Android WebViews inside hybrid apps, kiosk or appliance browsers, or polyfilled environments where Symbol/BigInt exist only as partial shims (typeof checks still fail for missing pieces).","solutions":["Use a current browser: Chrome/Edge >= 86, Firefox >= 114, Safari >= 16.4 (see the companion version check).","If you must support older runtimes, load full BigInt/Symbol polyfills — though true BigInt semantics are very hard to polyfill; a real browser upgrade is strongly preferred.","Update the WebView/Chromium embedding in hybrid apps rather than the page.","Gate the app entry point behind your own capability check and show an upgrade page instead of relying on the thrown error."],"exampleFix":"// before: the app throws on load in old browsers\n// (no code change possible in the app itself)\n\n// after: guard the entry point in the host page\nif (typeof BigInt !== 'function' ||\n    typeof DataView.prototype.getBigInt64 !== 'function' ||\n    typeof Symbol.asyncIterator !== 'symbol') {\n  document.body.innerHTML = '<p>This app requires a modern browser (Chrome 86+, Firefox 114+, Safari 16.4+).</p>';\n} else {\n  boot();\n}","handlingStrategy":"type-guard","validationCode":"function supportsRequiredFeatures() {\n  return typeof Symbol === 'function' &&\n         typeof Symbol.asyncIterator === 'symbol' &&\n         typeof BigInt === 'function' &&\n         typeof BigInt.asIntN === 'function' &&\n         typeof BigInt.asUintN === 'function' &&\n         typeof DataView.prototype.getBigInt64 === 'function';\n}\nif (!supportsRequiredFeatures()) showUpgradePage(); else startApp();","typeGuard":"function isModernBrowserRuntime() {\n  return typeof BigInt === 'function' &&\n    typeof BigInt.asIntN === 'function' &&\n    typeof DataView.prototype.getBigInt64 === 'function' &&\n    typeof Symbol.asyncIterator === 'symbol';\n}","tryCatchPattern":"window.addEventListener('error', function (e) {\n  if (/update your browser/.test(e.message || '')) showUpgradePage();\n});","preventionTips":["Advertise minimum browser requirements (Chrome 86+, Firefox 114+, Safari 16.4+) in docs and CI matrix.","Run feature detection before loading the HDF5 bundle to avoid a hard crash on load.","Test in the oldest browser you claim to support, including embedded WebViews."],"tags":["browser-compatibility","bigint","feature-detection","legacy-browser","webview"],"backgroundTag":"unsupported-browser-feature-detection","analyzedSha":"d8a543f5f847ef596aa58858d6adcf5d75545f7f","analyzedAt":"2026-08-27T19:21:42.082Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}