diff --git a/js/controllers/location.js b/js/controllers/location.js index 3b66876..3a9afd5 100644 --- a/js/controllers/location.js +++ b/js/controllers/location.js @@ -1,3 +1,5 @@ +import { supportsHistoryAPI } from '../utils/device.js' + /** * Reads and writes the URL based on reveal.js' current state. */ @@ -98,7 +100,7 @@ export default class Location { else if( currentSlide ) { // If we're configured to push to history OR the history // API is not avaialble. - if( config.history || !window.history ) { + if( config.history || supportsHistoryAPI === false ) { window.location.hash = this.getHash(); } // If we're configured to reflect the current slide in the diff --git a/js/utils/device.js b/js/utils/device.js index ec1034f..1e787fb 100644 --- a/js/utils/device.js +++ b/js/utils/device.js @@ -12,4 +12,6 @@ export const isAndroid = /android/gi.test( UA ); // up slides. Zoom produces crisper results but has a lot of // xbrowser quirks so we only use it in whitelisted browsers. export const supportsZoom = 'zoom' in testElement.style && !isMobile && - ( isChrome || /Version\/[\d\.]+.*Safari/.test( UA ) ); \ No newline at end of file + ( isChrome || /Version\/[\d\.]+.*Safari/.test( UA ) ); + +export const supportsHistoryAPI = typeof window.history.replaceState === 'function' && !/PhantomJS/.test( UA ); \ No newline at end of file