18ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenvar fileXHREnabled = function() {
28ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  var xhr = new XMLHttpRequest();
38ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  try {
48ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    xhr.onreadystatechange = function() {};
58ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    xhr.onerror = function() {};
68ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    xhr.open("GET", "nothing.xml", true);
78ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    xhr.send(null);
88ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  } catch (e) {
98ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    return false;
108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  }
118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  xhr.abort();
138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  return true;
148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen}();
158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Regenerate page if we are passed the "?regenerate" search param
178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// or if the user-agent is chrome AND the document is being served
188ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// from the file:/// scheme.
198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenif (window.location.search == "?regenerate" ||
208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    (navigator.userAgent.indexOf("Chrome") > -1) &&
218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    (window.location.href.match("^file:")) &&
228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    fileXHREnabled)    {
238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // Hide body content initially to minimize flashing.
258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  document.write('<style id="hider" type="text/css">');
268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  document.write('body { display:none!important; }');
278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  document.write('</style>');
288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  window.onload = window.renderPage;
308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  window.postRender = function() {
328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    var elm = document.getElementById("hider");
338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    elm.parentNode.removeChild(elm);
348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    // Since populating the page is done asynchronously, the DOM doesn't exist
368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    // when the browser tries to resolve any #anchors in the URL. So we reset
378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    // the URL once we're done, which forces the browser to scroll to the anchor
388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    // as it normally would.
398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    if (location.hash.length > 1)
408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen      location.href = location.href;
418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  }
428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} else if ((navigator.userAgent.indexOf("Chrome") > -1) &&
438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen           (window.location.href.match("^file:")) &&
448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen            !fileXHREnabled) {
458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  window.onload = function() {
468ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    // Display the warning to use the --allow-file-access-from-files.
478ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    document.getElementById("devModeWarning").style.display = "block";
488ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  }
498ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen}
50