{"record":{"id":"5e15411ca5f30ef8","repo":"mozilla/pdf.js","slug":"app-media-is-read-only","errorCode":null,"errorMessage":"app.media is read-only","messagePattern":"app\\.media is read-only","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/scripting_api/app.js","lineNumber":265,"sourceCode":"\n  set fs(_) {\n    throw new Error(\"app.fs is read-only\");\n  }\n\n  get language() {\n    return this._language;\n  }\n\n  set language(_) {\n    throw new Error(\"app.language is read-only\");\n  }\n\n  get media() {\n    return undefined;\n  }\n\n  set media(_) {\n    throw new Error(\"app.media is read-only\");\n  }\n\n  get monitors() {\n    return [];\n  }\n\n  set monitors(_) {\n    throw new Error(\"app.monitors is read-only\");\n  }\n\n  get numPlugins() {\n    return 0;\n  }\n\n  set numPlugins(_) {\n    throw new Error(\"app.numPlugins is read-only\");\n  }\n","sourceCodeStart":247,"sourceCodeEnd":283,"githubUrl":"https://github.com/mozilla/pdf.js/blob/5903d58d58e4dd9ce6ffa3834aea8480f06b4ada/src/scripting_api/app.js#L247-L283","documentation":"app.media always returns undefined because PDF.js does not implement the Acrobat multimedia API. The setter still throws to preserve the read-only contract of the property. Any assignment is rejected.","triggerScenarios":"PDF JavaScript or test code runs app.media = {...}; the setter at src/scripting_api/app.js:265 throws regardless of value.","commonSituations":"Legacy multimedia-heavy PDFs trying to install a media player object; authors assuming undefined means assignable.","solutions":["Do not assign to app.media; it is intentionally unsupported and always undefined.","Feature-detect: if (app.media === undefined) skip multimedia paths.","Render any media outside the PDF.js scripting API (e.g., host page)."],"exampleFix":"// before\napp.media = myPlayer;\n// after\nif (app.media === undefined) { /* multimedia not supported */ }","handlingStrategy":"type-guard","validationCode":"// app.media is intentionally undefined in pdf.js.\nconst hasMedia = (app) => app.media !== undefined;","typeGuard":"const isMediaSupported = (app) => app.media != null;","tryCatchPattern":"try { /* code that may assign app.media */ }\ncatch (e) { if (!/media is read-only/.test(e.message)) throw e; }","preventionTips":["Treat undefined stubs as permanently unsupported.","Feature-detect before any multimedia code path.","Render media via the host page, not the scripting API."],"tags":["scripting-api","read-only","multimedia","unsupported"],"backgroundTag":null,"analyzedSha":"5903d58d58e4dd9ce6ffa3834aea8480f06b4ada","analyzedAt":"2026-08-13T02:28:27.364Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}