diff --git a/web/app.js b/web/app.js index e9ba568b6..5358e5810 100644 --- a/web/app.js +++ b/web/app.js @@ -169,21 +169,14 @@ let PDFViewerApplication = { * @private */ async _readPreferences() { - // A subset of the Preferences that `AppOptions`, for compatibility reasons, - // is allowed to override if the `AppOptions` values matches the ones below. - const OVERRIDES = { - disableFontFace: true, - disableRange: true, - disableStream: true, - textLayerMode: TextLayerMode.DISABLE, - }; - + if (AppOptions.get('disablePreferences') === true) { + // Give custom implementations of the default viewer a simpler way to + // opt-out of having the `Preferences` override existing `AppOptions`. + return; + } try { const prefs = await this.preferences.getAll(); - for (let name in prefs) { - if ((name in OVERRIDES) && AppOptions.get(name) === OVERRIDES[name]) { - continue; - } + for (const name in prefs) { AppOptions.set(name, prefs[name]); } } catch (reason) { } diff --git a/web/app_options.js b/web/app_options.js index 08fb28848..220b28455 100644 --- a/web/app_options.js +++ b/web/app_options.js @@ -58,6 +58,9 @@ const defaultOptions = { value: false, kind: OptionKind.VIEWER, }, + /** + * The `disablePreferences` is, conditionally, defined below. + */ enablePrintAutoRotate: { /** @type {boolean} */ value: false, @@ -218,6 +221,11 @@ const defaultOptions = { }; if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('!PRODUCTION || GENERIC')) { + defaultOptions.disablePreferences = { + /** @type {boolean} */ + value: false, + kind: OptionKind.VIEWER, + }; defaultOptions.locale = { /** @type {string} */ value: (typeof navigator !== 'undefined' ? navigator.language : 'en-US'), diff --git a/web/viewer.js b/web/viewer.js index 8885162b2..2254731fc 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -203,6 +203,16 @@ function webViewerLoad() { window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication; window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions; + + if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) { + // Give custom implementations of the default viewer a simpler way to + // set various `AppOptions`, by dispatching an event once all viewer + // files are loaded but *before* the viewer initialization has run. + const event = document.createEvent('CustomEvent'); + event.initCustomEvent('webviewerloaded', true, true, {}); + document.dispatchEvent(event); + } + pdfjsWebApp.PDFViewerApplication.run(config); } }