]> git.openstreetmap.org Git - nominatim-ui.git/commitdiff
make sure webpages still work on file:// protocol (#94)
authormtmail <mtmail@gmx.net>
Wed, 3 Mar 2021 13:52:29 +0000 (14:52 +0100)
committerGitHub <noreply@github.com>
Wed, 3 Mar 2021 13:52:29 +0000 (14:52 +0100)
src/lib/api_utils.js
src/lib/stores.js

index a44a30e19e690b504cc368e3f203e7cbf4785d5e..9dff8771818f23955d240a952cd0326c5f7b4f02 100644 (file)
@@ -33,17 +33,27 @@ export async function fetch_from_api(endpoint_name, params, callback) {
 
 var fetch_content_cache = {};
 export async function fetch_content_into_element(url, dom_element) {
 
 var fetch_content_cache = {};
 export async function fetch_content_into_element(url, dom_element) {
+  if (!window.location.protocol.match(/^http/)) {
+    dom_element.innerHTML = `Cannot display data from ${url} here. `
+      + 'Browser security prevents loading content from file:// URLs.';
+    return;
+  }
+
   if (fetch_content_cache[url]) {
     dom_element.innerHTML = fetch_content_cache[url];
     return;
   }
   if (fetch_content_cache[url]) {
     dom_element.innerHTML = fetch_content_cache[url];
     return;
   }
-  await fetch(url)
-    .then(response => response.text())
-    .then(html => {
-      html = html.replace('Nominatim_API_Endpoint', Nominatim_Config.Nominatim_API_Endpoint);
-      dom_element.innerHTML = html;
-      fetch_content_cache[url] = html;
-    });
+  try {
+    await fetch(url)
+      .then(response => response.text())
+      .then(html => {
+        html = html.replace('Nominatim_API_Endpoint', Nominatim_Config.Nominatim_API_Endpoint);
+        dom_element.innerHTML = html;
+        fetch_content_cache[url] = html;
+      });
+  } catch (error) {
+    dom_element.innerHTML = `Error fetching content from ${url} (${error})`;
+  }
 }
 
 function generate_nominatim_api_url(endpoint_name, params) {
 }
 
 function generate_nominatim_api_url(endpoint_name, params) {
index 7ada7761489c0ddba2547c29f753f688cdc95f37..00b41959379e6b606c4b0a40040fb8bfb74f9d0d 100644 (file)
@@ -34,7 +34,13 @@ export function refresh_page(pagename, params) {
     if (param_str) {
       param_str = '?' + param_str;
     }
     if (param_str) {
       param_str = '?' + param_str;
     }
-    window.history.pushState([], '', pagename + '.html' + param_str);
+    let new_url = pagename + '.html' + param_str;
+
+    if (window.location.protocol.match(/^http/)) {
+      window.history.pushState([], '', new_url);
+    } else {
+      window.location.href = new_url;
+    }
   }
 
   page.set({ tab: pagename, params: params });
   }
 
   page.set({ tab: pagename, params: params });