Подтвердить что ты не робот

Как определить, запущена ли веб-страница с веб-сайта или локальной файловой системы

Я новичок в javascript. Как я могу определить, выполняется ли мой javascript с веб-сайта (http://) по сравнению с локальным файлом.

4b9b3361

Ответ 1

switch(window.location.protocol) {
   case 'http:':
   case 'https:':
     //remote file over http or https
     break;
   case 'file:':
     //local file
     break;
   default: 
     //some other protocol
}

Ответ 2

Для тестирования разных "видов" локально, все сразу:

// Returns the page location type
// 0 (falsey) = Local file, direct from disk (file://path/to/file.html)
// 1 (truthy) = Virtually remote file, from local server (http://localhost)
// 2 (truthy) = Remote file from remote server (http://example.com)

function locationType(){
    if( window.location.protocol == 'file:' ){ return 0; }
    if( !window.location.host.replace( /localhost|127\.0\.0\.1/i, '' ) ){ return 2; }
    return 1;
}

Обоснование: вы можете проверить, находится ли страница а) на удаленном сервере или б) на локальном сервере (тот же компьютер, для тестирования, как с AMP), или в) локальный файл, полученный напрямую с диска по протоколу "file://".

Обратите внимание, что это не обрабатывает все возможные крайние случаи. Например, технически вы можете перенаправить разные IP-адреса на "localhost", а другие схемы non- "file://" (например, "foo://") могут фактически представлять локальный доступ. Но это работает в большинстве случаев и может быть изменено по мере необходимости

Тестирование только для "http" и "https" немного ограничено, поскольку во всем мире используются десятки других сетевых и глобальных сетевых схем. Разумеется, независимо от того, являются ли они локальными или могут использовать код HTML/JS (Схемы URI IANA).

Ответ 3

Другие способы сделать это:

if (/^h/.test(document.location)) {
  // remote file over http or https
} else {
  // local file
}

или

if (document.location.host) {
  // remote file over http or https
} else {
  // local file
}

или (slow, не рекомендуется)

if ((''+document.location).indexOf('http') === 0) {
// if (document.location.protocol.indexOf('http') === 0) { // another way
  // remote file over http or https
} else {
  // local file
}

Ответ 4

Я использовал слегка модифицированную версию по сравнению с @Beejor, которая также обрабатывает возможный порт. Это позволяет установить базу uriHost для e. грамм. Запросы ajax/jquery, которым может потребоваться хост-часть, если они выполняются как локальный файл, а не через туннель SSH или напрямую через IP: порт. Часть обнаружения находится в условиях if-else.

var uriHost = "";
if (window.location.protocol === "file:") {
  console.log("Running as local file!");
  // like: file://<path>/index.html
  uriHost = "http://<my-host-or-ip>:<my-port>";
} else if (
  !window.location.host.replace(/(localhost|127\.0\.0\.1)(:\d+)?/i, "")
) {
  console.log("Running on local server (ssh tunnel etc.)");
  // like: "http://127.0.0.1:<my-port>"
} else {
  console.log("Running normally, via web server");
  // like: "http://<my-host-or-ip>:<my-port>"
}
// now do something with uriHost, e.g. for ajax uris etc.

Чтобы проверить, работает ли как локальный файл (т.е. file://), достаточно только проверки window.location.protocol === "file:".