URL থেকে প্রোটোকল, ডোমেন এবং পোর্ট পান


301

আমাকে প্রদত্ত URL থেকে পূর্ণ প্রোটোকল, ডোমেন এবং পোর্টটি বের করতে হবে। উদাহরণ স্বরূপ:

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

9
সেই পাঠকরা যেখানে উত্তরটি এখনকার বর্তমান অবস্থান নয় সেখানে
সন্ধানের

উত্তর:


150

প্রথমে বর্তমান ঠিকানাটি পান

var url = window.location.href

তারপরে কেবল সেই স্ট্রিংটিকে পার্স করুন

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

আপনার ইউআরএল হ'ল:

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

আশাকরি এটা সাহায্য করবে


8
এটি ইউআরএল স্ট্রিংয়ের সাথে কাজ করে যেখানে locationবস্তুটি উপলভ্য নয় (ব্রাউজারের বাইরে
জেএস

ডেভিড ক্যালহাউনের উত্তর অন্তর্নির্মিত পার্সার ব্যবহার করে (যেমন location) তবে যে কোনও ইউআরএল জন্য ব্যবহার করা যেতে পারে । এটা পরিষ্কার দেখুন।
স্টিজন ডি উইট

6
বা কেবল এটিকে একটি ওয়ান-লাইনারে পরিণত করুন:window.location.href.split('/').slice(0, 3).join('/')
রায়ান ম্যাকগেরি

এবং আপনি নোডে এটি কীভাবে করবেন?
ডিডিডি

5
window.location.origin
int soumen

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

3
নিবন্ধন করুন আপনি পাবেন about://। তবে আমি জানতে আগ্রহী, ব্যবহারের ক্ষেত্রে কী হবে about:blank? কোনও ব্রাউজার প্লাগইন সংস্থানগুলিতে ইনজেকশন about:blankদিচ্ছে কিনা তা আমি নিশ্চিত নই , তবে মনে হয় এটিই কেবল ব্যবহারের ক্ষেত্রে হতে পারে।
শেফ 2'12

3
আপনার কোনও ইউআরএল স্ট্রিং থাকলে এটি ঠিক কাজ করে না? (অর্থাত আপনি হতে পারে location এটির জন্য কাজ করতে)
নিক টি

1
দেরী জবাবের জন্য দুঃখিত, @ নিকটি। হ্যাঁ, এটি করে না। দয়া করে, এর জন্য ডেভিডের দেওয়া দুর্দান্ত সমাধানটি ব্যবহার করুন ।
শেফ

1
এই উত্তরটি সঠিক উত্তর হিসাবে বেছে নেওয়া উচিত। এটি পরিষ্কার এবং মানক অবস্থান অবজেক্টটি ব্যবহার করে।
মোহিত গঙ্গারাদ

14
আপনি + এর location.hostপরিবর্তে ব্যবহার করতে পারবেন না ? location.hostnamelocation.port
c24w

180

এই উত্তরগুলির কোনওটিই পুরোপুরি প্রশ্নটিকে সম্বোধন করছে বলে মনে হচ্ছে না, যা স্বেচ্ছাসেবীর ইউআরএল জন্য কল করে, বিশেষত বর্তমান পৃষ্ঠার url নয়।

পদ্ধতি 1: URL টি API ব্যবহার করুন (সতর্কতা: কোনও আইই 11 সমর্থন নেই)

আপনি URL টি API ব্যবহার করতে পারেন (আইই 11 দ্বারা সমর্থিত নয়, তবে অন্য কোথাও উপলব্ধ )।

এটি অনুসন্ধানের প্যারামগুলিতে অ্যাক্সেস করা সহজ করে তোলে । আরেকটি বোনাস: এটি কোনও ওয়েব কর্মী হিসাবে ব্যবহার করা যেতে পারে কারণ এটি ডোমের উপর নির্ভর করে না।

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

পদ্ধতি 2 (পুরানো উপায়): ডিওএম এ ব্রাউজারের অন্তর্নির্মিত পার্সার ব্যবহার করুন

আপনার যদি পুরানো ব্রাউজারগুলিতেও কাজ করার প্রয়োজন হয় তবে এটি ব্যবহার করুন।

//  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');

এটাই!

ব্রাউজারের অন্তর্নির্মিত পার্সার ইতিমধ্যে এর কাজটি সম্পন্ন করেছে। এখন আপনি কেবল আপনার প্রয়োজনীয় অংশগুলি দখল করতে পারেন (নোট করুন যে এটি উভয় পদ্ধতির জন্য উপরে কাজ করে):

//  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:'

বোনাস: অনুসন্ধানের প্যারাম

'? স্টার্ট ইন্ডেক্স = 1 এবং পৃষ্ঠা আকার = 10' যেহেতু নিজের নিজের থেকে খুব বেশি ব্যবহারযোগ্য নয়, আপনি সম্ভবত অনুসন্ধান ইউআরএল প্যারামগুলিও ছিন্ন করতে চান এমন সম্ভাবনা রয়েছে।

যদি আপনি উপরের পদ্ধতি 1 (URL এপিআই) ব্যবহার করেন তবে আপনি কেবল অনুসন্ধানপ্যারামগুলি পেতে পারেন:

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

বা সমস্ত পরামিতি পেতে:

function searchParamsToObj(searchParams) {
  const paramsMap = Array
    .from(url.searchParams)
    .reduce((params, [key, val]) => params.set(key, val), new Map());
  return Object.fromEntries(paramsMap);
}
searchParamsToObj(url.searchParams);
// -> { startIndex: '1', pageSize: '10' }

আপনি যদি পদ্ধতি 2 (পুরানো উপায়) ব্যবহার করেন তবে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

// 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' }

লিঙ্ক.প্রোটোকল আমাকে "HTTP:" পেয়ে যায় যদি আমি "google.com" দিয়ে কোনও অ্যাঙ্কার পরিদর্শন করি :-(var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
এক্স এক্স

আপনি httpসম্ভবত একটি পৃষ্ঠায় এটি করছেন ? নির্দিষ্ট না করা থাকলে এটি বর্তমান অবস্থান থেকে 'উত্তরাধিকারী' হবে
স্টিজন ডি উইট

4
এটি একটি দুর্দান্ত উত্তর এবং আরও বেশি ভোট পাওয়া উচিত, কারণ এই উত্তরটি কেবলমাত্র বর্তমান অবস্থানের মধ্যে সীমাবদ্ধ নয় তবে যে কোনও ইউআরএল-এর জন্য কাজ করে , এবং কারণ এই উত্তরটি নিজেরাই তৈরি করার পরিবর্তে ব্রাউজারের অন্তর্নির্মিত পার্সারটিকে ব্যবহার করে (যা আমরা পারিনা) পাশাপাশি বা দ্রুত করার আশা করি!)।
স্টিজন ডি উইট

এই চালাক কৌতুক জন্য আপনাকে ধন্যবাদ! আমি একটি জিনিস যুক্ত করতে চাই: উভয়ই আছে hostএবং hostname। পূর্ববর্তীটিতে বন্দরটি অন্তর্ভুক্ত থাকে (উদাঃ localhost:3000), তবে পরেরটিরটি কেবল হোস্টের নাম (যেমন localhost)।
কোডেনার

এটি পরম URL এর ক্ষেত্রে ভাল কাজ করে। এটি সম্পর্কিত ইউআরএল এবং ক্রস ব্রাউজারের ক্ষেত্রে ব্যর্থ হয়। কোন পরামর্শ?
গুরুরাজ

132

কিছু কারণে সমস্ত উত্তর সমস্ত ওভারকিল। এটি যা লাগে তা এই:

window.location.origin

আরও বিশদ এখানে পাওয়া যাবে: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties


19
এফওয়াইআই, আমি নিশ্চিত যে ভবিষ্যতে এটি দুর্দান্ত হবে যখন সমস্ত জনপ্রিয় ব্রাউজারগুলি এটি প্রয়োগ করে তবে বর্তমানে এটি তেমনটি নয়: ডেভেলপার.মোজিলা.আর / ইউএস / ডকস / ওয়েবে / এপিআই /… এ ফায়ারফক্স এবং ওয়েবকিট ব্রাউজারগুলির কেবল সাম্প্রতিক সংস্করণগুলি লেখার সময়টি আমার গবেষণা অনুসারে মূল সম্পত্তিটিকে সমর্থন করে।
জ্যাক শেঠ

2
কেবলমাত্র সম্পন্ন করার জন্য: অবস্থানটি HTML5 এ সংজ্ঞায়িত করা হয়েছে এবং এটি URLUtilsইন্টারফেসটি প্রয়োগ করে যা WHATWG এ সংজ্ঞায়িত করা হয়েছে এবং এতে originবৈশিষ্ট্যও অন্তর্ভুক্ত রয়েছে ।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

5
হ্যালো ২০১৫ থেকে .. দুর্ভাগ্যক্রমে ইউআরডি ইউটিসগুলি এখনও সমস্ত ব্রাউজারগুলিতে এমডিএন-এর এই সামঞ্জস্যতার টেবিল অনুযায়ী সঠিকভাবে প্রয়োগ করা হয়নি । তবে এটি দেখে মনে হয় যে ২০১৩ সালের তুলনায় মূল সম্পত্তিটি কিছুটা ভাল সমর্থিত, এটি এখনও উত্পাদনের জন্য উপযুক্ত নয় কারণ এটি সাফারিতে সঠিকভাবে প্রয়োগ করা হয়নি। দুঃখিত বন্ধুরা :(
পুরোপুরি নটলিজার্ডস

আপডেট: এখনও অনেক ব্রাউজারের জন্য সমর্থিত নয় (সাফারিও) :( :(
আহমদ হামজা

এটি আই-তেও কাজ করে না, এটি "অপরিজ্ঞাত" দেয়।
সিদ্ধার্থ চৌধুরী

53

যেমনটি ইতিমধ্যে উল্লেখ করা হয়েছে সেখানে এখনও সম্পূর্ণরূপে সমর্থিত window.location.originনয় তবে এটির ব্যবহার বা ব্যবহারের জন্য একটি নতুন ভেরিয়েবল তৈরির পরিবর্তে আমি এটির জন্য পরীক্ষা করতে পছন্দ করি এবং এটি সেট করার জন্য সেট না করা থাকলে।

উদাহরণ স্বরূপ;

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

আমি আসলে কয়েক মাস আগে এই সম্পর্কে লিখেছিলাম উইন্ডো.লোকেশন.রিগিনের জন্য একটি স্থির


1
এই প্রথম আমি জানি window.location.originযে বিদ্যমান। ধন্যবাদ. ^^
ইটাইজোন জো

33

নিমন্ত্রণকর্তা

var url = window.location.host;

আয় localhost:2679

হোস্ট-নেম

var url = window.location.hostname;

আয় localhost


ধন্যবাদ!!! লোকালহোস্টের localhost/পরিবর্তে কেন প্রদর্শিত হচ্ছে তা আমি বুঝতে পারি না localhost:3000
টাইলার ইয়ংব্লুড


14

প্রোটোকল সম্পত্তি কর্নেল (:) সহ বর্তমান ইউআরএলের প্রোটোকল সেট করে বা প্রদান করে।

এর অর্থ হ'ল আপনি যদি কেবল এইচটিটিপি / এইচটিটিপিএস অংশ পেতে চান তবে আপনি এই জাতীয় কিছু করতে পারেন:

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

ডোমেনের জন্য আপনি ব্যবহার করতে পারেন:

var domain = window.location.hostname;

বন্দরের জন্য আপনি ব্যবহার করতে পারেন:

var port = window.location.port;

মনে রাখবেন যে ইউআরএলটিতে দৃশ্যমান না থাকলে পোর্টটি একটি খালি স্ট্রিং হবে। উদাহরণ স্বরূপ:

আপনার কোনও বন্দর ব্যবহার না থাকলে আপনার যদি 80/443 দেখানোর দরকার হয়

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

9

কেন ব্যবহার করবেন না:

let full = window.location.origin

3
বিদ্যমান উত্তরের সাথে কোনও পুরানো প্রশ্নের উত্তর যুক্ত করার সময় আপনার উত্তর কী নতুন তথ্য নিয়ে আসে তা ব্যাখ্যা করা এবং সময়ের সাথে উত্তরের উপর প্রভাব ফেলে কিনা তা স্বীকার করে নেওয়া দরকারী।
জেসন অ্যালার

8

প্রকৃতপক্ষে, উইন্ডো.লোকেশন.রিগিন ব্রাউজারগুলিতে মান অনুসরণ করে, তবে অনুমান করুন। IE মান অনুসরণ করে না।

সুতরাং সে কারণেই, আইই, ফায়ারফক্স এবং ক্রোমে এটিই আমার পক্ষে কাজ করেছে:

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

তবে সম্ভাব্য ভবিষ্যতের বর্ধনের জন্য যা দ্বন্দ্বের কারণ হতে পারে, আমি "অবস্থান" বস্তুর আগে "উইন্ডো" রেফারেন্স নির্দিষ্ট করেছি।

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

6

আমি যে সমাধানটি ব্যবহার করছি তা এখানে:

const result = `${ window.location.protocol }//${ window.location.host }`;

সম্পাদনা করুন:

ক্রস ব্রাউজার সামঞ্জস্য যোগ করতে, নিম্নলিখিত ব্যবহার করুন:

const result = `${ window.location.protocol }//${ window.location.hostname + (window.location.port ? ':' + window.location.port: '') }`;

1
উত্সাহিত, তবে window.location.hostসেরা ক্রস ব্রাউজার নাও হতে পারে
নাথানফ্র্যাঙ্ক

1
ধন্যবাদ, আমি আমার মূল উত্তরে ক্রস ব্রাউজারের সামঞ্জস্যতা যুক্ত করেছি।
জুলিয়েনরুইক্স

3
var http = location.protocol;
var slashes = http.concat("//");
var host = slashes.concat(window.location.hostname);

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

2
আপনার উত্তর ব্যাখ্যা বিবেচনা করুন। ধরে নিবেন না যে ওপি আপনার কোডের বিভিন্ন অংশের তাত্পর্য বুঝতে পারে।
এডিসন

3

একটি নিয়মিত এক্সপ্রেশন (রেজেক্স) ব্যবহার করার চেষ্টা করুন, যা আপনি যখন যাচাই বাছাই করতে / এমনকি জাভাস্ক্রিপ্টে কিছু সাধারণ পার্সিং করতে চান তখন বেশ কার্যকর হবে।

রেজেক্সটি হ'ল:

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

প্রদর্শন:

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]

এখন আপনি বৈধতাও করতে পারেন।


"একটি বৈধ আরএফসি 3986 ইউআরএল স্কিমটিতে অবশ্যই" একটি চিঠি থাকতে হবে এবং তারপরে বর্ণ, অঙ্ক, প্লাস ("+"), পিরিয়ড ("।"), বা হাইফেন ("-") এর কোনও সংমিশ্রণ থাকতে হবে। "- স্ট্যাকওভারফ্লো। com / a / 9142331/188833 (এখানে একটি ঝাল: ietf: rfc: 3897 (ইউআরআই) / বার্ন: ietf: আরএফসি: 3897 (আইআরআই)) রেজিেক্স : স্কাইটির জন্য পাইথনের একটি ইউআরআই / আইআরআইয়ের অংশ: github.com/dgerber /rfc3987/blob/master/rfc3987.py#L147 )
ওয়েস টার্নার

2

সহজ উত্তর যা সমস্ত ব্রাউজারের জন্য কাজ করে:

let origin;

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

origin = window.location.origin;

1

কনফিগারযোগ্য পরামিতি সহ ES6 শৈলী।

/**
 * 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
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.