pengembangan-web-mp-pd.com

Dapatkan protokol, domain, dan port dari URL

Saya perlu mengekstrak protokol, domain, dan port lengkap dari URL yang diberikan. Sebagai contoh:

https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
251
yelo3

pertama-tama dapatkan alamat saat ini

var url = window.location.href

Kemudian parsing string itu

var arr = url.split("/");

url Anda adalah:

var result = arr[0] + "//" + arr[2]

Semoga ini membantu

124
wezzy
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
500
Shef

Tidak satu pun dari jawaban ini yang tampaknya sepenuhnya menjawab pertanyaan, yang meminta url sewenang-wenang, tidak secara khusus url dari halaman saat ini.

Metode 1: Gunakan API URL (peringatan: tidak ada dukungan IE11)

Anda dapat menggunakan URL API (tidak didukung oleh IE11, tetapi tersedia di tempat lain ).

Ini juga memudahkan untuk mengakses mencari params . Bonus lain: itu dapat digunakan dalam Pekerja Web karena tidak tergantung pada DOM.

const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');

Metode 2 (cara lama): Gunakan parser bawaan browser di DOM

Gunakan ini jika Anda membutuhkan ini untuk bekerja di browser lama juga.

//  Create an anchor element (note: no need to append this element to the document)
const url = document.createElement('a');
//  Set href to any path
url.setAttribute('href', 'http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');

Itu dia!

Parser bawaan browser telah melakukan tugasnya. Sekarang Anda bisa mengambil bagian yang Anda butuhkan (perhatikan bahwa ini berfungsi untuk kedua metode di atas):

//  Get any piece of the url you're interested in
url.hostname;  //  'example.com'
url.port;      //  12345
url.search;    //  '?startIndex=1&pageSize=10'
url.pathname;  //  '/blog/foo/bar'
url.protocol;  //  'http:'

Bonus: Cari params

Kemungkinannya Anda mungkin ingin memecah params url pencarian juga, karena '? StartIndex = 1 & pageSize = 10' tidak terlalu bisa digunakan sendiri.

Jika Anda menggunakan Metode 1 (API URL) di atas, Anda cukup menggunakan getter searchParams:

url.searchParams.get('searchIndex');  // '1'

Atau untuk mendapatkan semua parameter:

Array
    .from(url.searchParams)
    .reduce((accum, [key, val]) => {
        accum[key] = val;
        return accum;
    }, {});
// -> { startIndex: '1', pageSize: '10' }

Jika Anda menggunakan Metode 2 (cara lama), Anda dapat menggunakan sesuatu seperti ini:

// Simple object output (note: does NOT preserve duplicate keys).
var params = url.search.substr(1); // remove '?' prefix
params
    .split('&')
    .reduce((accum, keyval) => {
        const [key, val] = keyval.split('=');
        accum[key] = val;
        return accum;
    }, {});
// -> { startIndex: '1', pageSize: '10' }
148
David Calhoun

Untuk beberapa alasan semua jawabannya adalah semua berlebihan. Ini yang dibutuhkan:

window.location.Origin

Lebih detail dapat ditemukan di sini: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties

111
Pijusn

Seperti yang telah disebutkan ada window.location.Origin yang belum sepenuhnya didukung tetapi alih-alih menggunakannya atau membuat variabel baru untuk digunakan, saya lebih suka memeriksa dan jika tidak diatur untuk mengaturnya.

Sebagai contoh;

if (!window.location.Origin) {
  window.location.Origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

Saya benar-benar menulis tentang ini beberapa bulan yang lalu Perbaikan untuk window.location.Origin

49
Toby

Tuan rumah

var url = window.location.Host;

mengembalikan localhost:2679

nama host

var url = window.location.hostname;

mengembalikan localhost

28
Miroslav Holec

Properti protokol menetapkan atau mengembalikan protokol URL saat ini, termasuk titik dua (:).

Ini berarti bahwa jika Anda ingin mendapatkan hanya bagian HTTP/HTTPS Anda dapat melakukan sesuatu seperti ini:

var protocol = window.location.protocol.replace(/:/g,'')

Untuk domain Anda dapat menggunakan:

var domain = window.location.hostname;

Untuk port Anda dapat menggunakan:

var port = window.location.port;

Ingatlah bahwa port akan berupa string kosong jika tidak terlihat di URL. Sebagai contoh:

Jika Anda perlu menampilkan 80/443 saat Anda tidak menggunakan port

var port = window.location.port || (protocol === 'https' ? '443' : '80');

Memang, window.location.Origin berfungsi dengan baik di browser mengikuti standar, tapi coba tebak. IE tidak mengikuti standar.

Jadi karena itu, inilah yang bekerja untuk saya di IE, FireFox dan Chrome:

var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');

tetapi untuk kemungkinan peningkatan di masa depan yang dapat menyebabkan konflik, saya menentukan referensi "jendela" sebelum objek "lokasi".

var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ? ':'+window.location.port: '');
6
cpu

window.location.Origin akan cukup untuk mendapatkan yang sama.

5
int soumen
var getBasePath = function(url) {
    var r = ('' + url).match(/^(https?:)?\/\/[^/]+/i);
    return r ? r[0] : '';
};
2
haipeng

Coba gunakan ekspresi reguler (Regex), yang akan sangat berguna ketika Anda ingin memvalidasi/mengekstrak barang atau bahkan melakukan penguraian sederhana dalam javascript.

Regex adalah: 

/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/

Demonstrasi:

function breakURL(url){

     matches = /([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);

     foo = new Array();

     if(matches){
          for( i = 1; i < matches.length ; i++){ foo.Push(matches[i]); }
     }

     return foo
}

url = "https://www.google.co.uk:55699/search?q=http%3A%2F%2F&oq=http%3A%2F%2F&aqs=chrome..69i57j69i60l3j69i65l2.2342j0j4&sourceid=chrome&ie=UTF-8"


breakURL(url);       // [https, www.google.co.uk, 55699] 
breakURL();          // []
breakURL("asf");     // []
breakURL("asd://");  // []
breakURL("asd://a"); // [asd, a, undefined]

Sekarang Anda dapat melakukan validasi juga.

2
ed9w2in6
var http = location.protocol;
var slashes = http.concat("//");
var Host = slashes.concat(window.location.hostname);
2
Elankeeran

Inilah solusi yang saya gunakan:

const result = `${ window.location.protocol }//${ window.location.Host }`;
0
JulienRioux

Jawaban sederhana yang berfungsi untuk semua browser:

let Origin;

if (!window.location.Origin) {
  Origin = window.location.protocol + "//" + window.location.hostname + 
     (window.location.port ? ':' + window.location.port: '');
}

Origin = window.location.Origin;
0
Mike Hawes

Gaya ES6 dengan parameter yang dapat dikonfigurasi.

/**
 * Get the current URL from `window` context object.
 * Will return the fully qualified URL if neccessary:
 *   getCurrentBaseURL(true, false) // `http://localhost/` - `https://localhost:3000/`
 *   getCurrentBaseURL(true, true) // `http://www.example.com` - `https://www.example.com:8080`
 *   getCurrentBaseURL(false, true) // `www.example.com` - `localhost:3000`
 *
 * @param {boolean} [includeProtocol=true]
 * @param {boolean} [removeTrailingSlash=false]
 * @returns {string} The current base URL.
 */
export const getCurrentBaseURL = (includeProtocol = true, removeTrailingSlash = false) => {
  if (!window || !window.location || !window.location.hostname || !window.location.protocol) {
    console.error(
      `The getCurrentBaseURL function must be called from a context in which window object exists. Yet, window is ${window}`,
      [window, window.location, window.location.hostname, window.location.protocol],
    )
    throw new TypeError('Whole or part of window is not defined.')
  }

  const URL = `${includeProtocol ? `${window.location.protocol}//` : ''}${window.location.hostname}${
    window.location.port ? `:${window.location.port}` : ''
  }${removeTrailingSlash ? '' : '/'}`

  // console.log(`The URL is ${URL}`)

  return URL
}
0
Sébastien

window.location.protocol + '//' + window.location.Host

0
Code_Worm