In IE11 windows 8 call to window.localStorage was throwing out an access denied error. Using try and catch manages the issue and allows the script to execute in IE 11 in desktop mode.
I think it is a problem with IE11 rather than the way Silverstripe is implementing the preview via an iframe from what I have been reading. http://blogs.msdn.com/b/ieinternals/archive/2009/09/16/bugs-in-ie8-support-for-html5-postmessage-sessionstorage-and-localstorage.aspx. It seems that the way IE11 deals with localStorage is broken in certain cases but I am not 100% certain of the cause yet as I have not been able to find a definitive answer. I only noticed it was a problem when a new client said they couldn't view the admin screen properly in IE11. I took a look in IE11 and I was experiencing the same problem which makes the admin interface layout screw up and the preview doesn't work due the error mentioned in the first post.
Instead of the original code I submitted I have amended it and added an additional function to test more robustly to see if localStorage is available and can be accessed properly. It is a copy of the code on a blog post Mathias Bynens has written about detecting if localStorage is available and can be used: https://mathiasbynens.be/notes/localstorage-pattern
I have added a console.warn as you suggested if localStorage is not available so that at least you get a warning if localStorage tests fail.
I have tested this on Windows 8.1: Firefox, Chrome & Mac: Firefox, Safari, Chrome and it seems to work as expected. On IE11 it displays the admin area correctly now but obviously doesn't save the preview settings between page loads if localStorage is not available.
Convert namespaced class names to html safe strings in `LeftAndMain.php` `CMSMenu.php` and `LeftAndMain.Main.js` by replacing backslashes (\) with dashes (\) and removing special characters with `Convert::raw2htmlname()`
- Content filters included in SiteTree view
- View (tree/list) buttons included in SiteTree view
- Update view button styles for new layout
- Updated breadcrumbs for new layout
- The filter panel has been removed in favour of a search menu in the header.
- The multi-select component has been updated:
- Now called 'Bulk actions'
- Styling updated
- Added placeholder text / removed redundant option
- Now also appears in SiteTree view
Remove "delete from live" duplicate action in favour of existing "unpublish" which is more consistent with current terminology
Add pop-up verification to destructive actions
Fix bug in reporting publishing of error pages
Restoring a page also restores parents
Code removed here intentonally prevented node selection when dragging but at the cost of clicks on site tree icons selecting the node but not loading the link. Since it's possible to drag a site tree item from the title, not just the icon, think it's better to remove this for now (choosing the lesser of two evils). A full fix to prevent node selection should follow, perhaps during an upgrade to jstree.
The CMS preview causes unnecessary browser processing by loading a URL
which should be considered "in transit" when a CMS redirect is set through
the X-ControllerURL HTTP header. The CMS history processing will
load this new URL, and cause a new preview URL to be loaded.
Fixes https://github.com/silverstripe/silverstripe-translatable/issues/158
1. Add missing _super calls.
2. Make UI widget destroys more consistent to avoid exceptions.
Selectable would throw an exception in the GridField.js if destroy
called from onunmatch - at that stage jQuery UI would have had called
the destroy already. Add a guard, and change to onremove, which triggers
before the element is removed from DOM.
3. DOM traversal fails after the element is removed from DOM.
Onunmatch triggers after the removal of the element from the DOM, which
makes DOM traversal fail. Use onremove instead, which triggers while the
element is still in DOM.
The files are uploaded to transifex.com now, which means we needed
to consolidate the file names (= locales). Since Transifex doesn't allow
arbitrary JavaScript structures, we're using an intermediary JSON
format which gets transformed into the JS used by the framework.
See b59f3858af for generator logic.
Fixes https://github.com/silverstripe/silverstripe-framework/issues/2499
When a querystring is passed with the url (for example Translatable locale) it is duplicated each time the content panel is reloaded, by adding document.location.search and so it should be stripped from the url first.
This edge case can occur when a large tree is cached in HTML already,
without any nodes expanded via ajax. If a new node is added with
a parent that's not existant, it was simply placed on the root node.
This is a display bug, a full CMS refresh fixes it.
Fixes a related bug where tree causes (view) duplicates,
where the same node is rendered twice. This was due to the whole
subtree being refreshed (including the new node) through jstree's
built-in "open"/"select" events, while at the same time
creating a new node through updateNodesFromServer() callbacks.
Also added a global tree loading indication to make it clear
that the tree is still processing.
See https://github.com/silverstripe/silverstripe-cms/issues/872
Currently help menu item is the only external link in the CMS and the ability for it to work is hardcoded in the template. This request makes the target attribute definable by CMSMenu::add_link().
Adds documentation for how to add a basic external link to the CMS.
In IE8, when a page in the preview iframe uses a web font (not just
references it in CSS, but actually has glyphs present in the page),
the fonts in the containing admin interface will become corrupted
(display as all squares) until the mouse moves.
This commit uses the technique described at
http://stackoverflow.com/questions/9809351/ie8-css-font-face-fonts-only-working-for-before-content-on-over-and-sometimes#10557782
to cause the admin panel to re-calculated all it's fonts
after the preview iframe has loaded, fixing the glitch
This is needed in some situations when we only want to update a
small single component, sometimes even using a different controller to
the one implied in the URL.
An example here is reloading dynamically the subsite dropdown without
reloading the entire page, updating a filter sidebar or suchlike.