My version of Windows 10 Pro, the default browser is Edge 42.17134.1.0. But the right sidebar, where Outlook launches the add-in, uses the old IE10 mechanism; ((IE10 also exists on Windows as a browser.) I donβt know if this is true for all Windows or is it some special case for my version. IE10 supports history.replaceState
and history.pushState
, but inside Outlook I have problems with these methods, so simple recovery does not work for me.
A simple solution with history.replaceState
and history.pushState
cache does not work for me. In Outlook with IE10 inside, I get an unexpected error when my code calls history.replaceState
or history.pushState
. But I found one interesting thing. If you suppress the mistake, they do their job.
So my workaround:
function isIE10 () { return !!document.documentMode } // Office js deletes window.history.pushState and window.history.replaceState. Cache them and restore them // Also there is an issue in Windows Outlook with 'pushState' and 'replaceState'. They throw an error but in the same time do their expected work // So I suppress errors for IE10 (we use it inside Window Outlook) window._historyCache = { replaceState: function (originalReplaceState) { return function () { try { return originalReplaceState.apply(window.history, arguments) } catch (e) { if (isIE10()) { console.warn("Unexpected error in 'window.history.replaceState', but we can continue to work :)"); return false; } throw(e); } } }(window.history.replaceState), pushState: function (originalFunction) { return function () { try { return originalFunction.apply(window.history, arguments) } catch (e) { if (isIE10()) { console.warn("Unexpected error in 'window.history.pushState', but we can continue to work :)"); return false; } throw(e); } } }(window.history.pushState) }; // In Window Outlook we have issue with 'replaceState' and 'pushState. So replaced it by wrapped version. window.history.replaceState = window._historyCache.replaceState; window.history.pushState = window._historyCache.pushState; //include the main code with react-router //include Office.js Office.initialize = function () { // Office js deletes window.history.pushState and window.history.replaceState. Restore them window.history.replaceState = window._historyCache.replaceState; window.history.pushState = window._historyCache.pushState; // Now you can start initialize&&run your application .... }
Note. I have to replace history.replaceState
and history.pushState
before running any code that works with this API. In my case, it responds to the router.
source share