0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00
ghost/core/server/web/admin/views/preview.html
Hannah Wolfe a0bdba2516 Added theme preview mode
- Allow the frontend to accept post messages to generate previews of the frontend
- Created a new endpoint in admin we can use to render these previews, which is possibly not necessary
- Supports a limited group of settings, which can easily be expanded, but care should be taken if expanding to use user-provided strings
2021-02-17 13:49:41 +00:00

53 lines
2.1 KiB
HTML

<script type="text/javascript" charset="utf-8">
(function(){
function onReceive(message) {
// If we're not using IE, or HTTPS we can use document.write
if ((window.location.protocol === 'http:') || !navigator.userAgent.match(/MSIE|rv:11/i)) {
document.write(message.data);
document.close();
return;
}
// In all other cases document.write() is blocked in callbacks - process the HTML instead
// We also have to individually add <script> tags back in - same as when using unsafeHTML in react
var domParser = new DOMParser();
var html = domParser.parseFromString(message.data, 'text/html');
document.getElementsByTagName('head')[0].innerHTML = html.getElementsByTagName('head')[0].innerHTML;
document.getElementsByTagName('body')[0].innerHTML = html.getElementsByTagName('body')[0].innerHTML;
var allScripts = document.getElementsByTagName('script');
if (allScripts.length > 0) {
var scripts = [];
for (var i = 0; i < allScripts.length; i++) {
scripts.push(allScripts[i]);
}
for (var i = 0; i < scripts.length; i++) {
var s = document.createElement('script');
s.innerHTML = scripts[i].innerHTML;
scripts[i].parentNode.appendChild(s);
scripts[i].parentNode.removeChild(scripts[i]);
}
}
}
if (window.addEventListener){
addEventListener("message", onReceive, true);
} else {
attachEvent("onmessage", onReceive);
}
top.postMessage('loaded', "*");
})();
(function(XMLHttpRequest){
if (!XMLHttpRequest || !XMLHttpRequest.prototype) return;
var noXHR = function() {
if (console) {
console.error('Not Permitted');
}
};
XMLHttpRequest.prototype.open = XMLHttpRequest.prototype.send = noXHR;
})(this.XMLHttpRequest);
</script>