Я новичок в javascript. Как я могу определить, выполняется ли мой javascript с веб-сайта (http://) по сравнению с локальным файлом.
Как определить, запущена ли веб-страница с веб-сайта или локальной файловой системы
Ответ 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:"
.