কিভাবে jquery বা জাভাস্ক্রিপ্ট সঙ্গে বেস url পেতে?


152

জুমলা পিএইচপি তে আমি $this->baseurlবেস পাথটি পেতে ব্যবহার করতে পারি, তবে আমি jquery তে বেস পাথটি পেতে চেয়েছিলাম।

বেস পাথ নিম্নলিখিত উদাহরণগুলির মধ্যে একটি হতে পারে:

http://www.example.com/
http://localhost/example
http://www.example.com/sub/example

exampleএছাড়াও পরিবর্তিত হতে পারে।



@ মৃতুঞ্জয় আমি এটি ইতিমধ্যে দেখেছি, তবে আমার ক্ষেত্রে বেস পথটি পৃথক হয়েছে যেমন আমি পিএইচপি যেমন জুমলার মতো বেস পাথটি পেতে চেয়েছিলাম
নবীন রাণিয়ার

তাহলে, উত্তরগুলির কোনওটিই আপনার সমস্যার সমাধান করেনি?
আর্টজম বি

একটি উত্তর চয়ন করুন, দয়া করে?
অ্যালানবেরি

উত্তর:


177

এটি আপনাকে সহায়তা করবে ...

var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];

হ্যাঁ এটা কাজ করে! http://localhost/myapp/what/ever/sub/folder-> getBaseUrl -> http://localhost/myapp:-)
ভি

3
এটি সমস্ত ক্ষেত্রে কাজ করবে না, যেমনটি @ আর্টজম বি দ্বারা কোনওরকম অবমূল্যায়িত উত্তর দ্বারা নির্দেশিত হয়েছে উদাহরণস্বরূপ, যখন কোনও সাইট স্থানীয় নেটওয়ার্কের উপর পরীক্ষা করা হয় (এবং ডোমেনটি আইপি + স্থানীয় পাথ দ্বারা প্রতিস্থাপিত হয়) তখন বেস url এর মতো কিছু হতে পারে 192.168.0.23/~sites/site/html/পরিবর্তে site.dev। জাভাস্ক্রিপ্টের সাথে পুরো পথের নাম পাওয়াও খুব একটা বিকল্প নয়, কারণ কোনও সাইটে ভার্চুয়াল সাব-ডাইরেক্টরিগুলির সংখ্যা থাকতে পারে।
অবশ্যই

124

আমি মনে করি এটি আপনার পক্ষে ঠিক হয়ে যাবে

var base_url = window.location.origin;

var host = window.location.host;

var pathArray = window.location.pathname.split( '/' );

7
খুব সুন্দর এবং মিষ্টি, ধন্যবাদ। window.location.origin
তেত্রদেব

1
এটি পছন্দসই উত্তর হওয়া উচিত, কারণ এটি সংক্ষিপ্ত, সংক্ষিপ্ত এবং সূক্ষ্মভাবে কাজ করে।
গ্রেগোর

উইন্ডো.লোকেশন.অরগিন ইহ 9
jnoreiga

1
@ জেনোরিগা এখনও যিনি ie9 using ব্যবহার করছেন
আলেকজান্দ্রে ডাব্রিকোর্ট

2
আমি আশা করি এটি সহজ সরল @ আলেকজান্ডারডৌব্রিকোর্ট
জোনরিগা

30

এটি বেস url পাবে

var baseurl = window.location.origin+window.location.pathname;

এটি উইন্ডো.অলোকেশন হার্ফের মতোই
জেড খোলা

8
এটি এক রকম নয়, পাথনাম আপনাকে ইউআরএল এর পাথ ভাগ করে দেয়,
href-

24

এটি একটি অত্যন্ত পুরানো প্রশ্ন, তবে আমি ব্যক্তিগতভাবে ব্যবহার করা পদ্ধতিগুলি এখানে ...

স্ট্যান্ডার্ড / বেস ইউআরএল পান

যেমন অনেকে ইতিমধ্যে জানিয়েছে, এটি বেশিরভাগ পরিস্থিতিতে কাজ করে।

var url = window.location.origin;


পরম বেস URL পাবেন Get

যাইহোক, এই সহজ পদ্ধতির কোনও বন্দর নম্বর ছাঁটাই করতে ব্যবহার করা যেতে পারে।

var url = "http://" + location.host.split(":")[0];

সম্পাদনা করুন: জেসন রাইসের দ্বারা উদ্ভুত উদ্বেগের সমাধানের জন্য, নীচে স্বয়ংক্রিয়ভাবে সঠিক প্রোটোকল প্রকার সন্নিবেশ করতে ব্যবহার করা যেতে পারে ...

var url = window.location.protocol + "//" + location.host.split(":")[0];


বেস ইউআরএল সেট করুন

বোনাস হিসাবে - বেস URL টি তখন বিশ্বব্যাপী নতুন সংজ্ঞা দেওয়া যেতে পারে।

document.head.innerHTML = document.head.innerHTML + "<base href='" + url + "' />";

1
আপনার প্রোটোকলটি https এর মতো HTTP ব্যতীত অন্য কিছু না হলে (তারপরে url প্রোটোকলটি "http: //" এ সেট করা আপনি ইউআরএল কীভাবে ব্যবহার করতে চান তার উপর নির্ভর করে কিছু সত্যই অদ্ভুত ত্রুটি উপস্থাপন করবে)।
জেসন রাইস

13

এটি জাভাস্ক্রিপ্ট থেকে সম্ভব নয়, কারণ এটি একটি সার্ভার-সাইড সম্পত্তি। ক্লায়েন্টের জাভাস্ক্রিপ্ট জুমলা কোথায় ইনস্টল করা আছে তা জানতে পারে না। সর্বোত্তম বিকল্পটি হ'ল কোনওভাবে $this->baseurlপৃষ্ঠা জাভাস্ক্রিপ্টের মান অন্তর্ভুক্ত করা এবং তারপরে এই মানটি ( phpBaseUrl) ব্যবহার করুন ।

এরপরে আপনি এইভাবে ইউআরএল তৈরি করতে পারেন:

var loc = window.location;
var baseUrl = loc.protocol + "//" + loc.hostname + (loc.port? ":"+loc.port : "") + "/" + phpBaseUrl;

1
লক্ষ্য করুন loc.host, পোর্ট রয়েছে মত একটি URL http://localhost:8082/এই পদ্ধতি উত্পাদন করা হবে http://localhost:8082:8082/, window.location.hostnameপরিবর্তে ব্যবহার করা উচিত।
টিবেরিউ সি।

@TiberiuC। ধন্যবাদ, যোগ করা হয়েছে।
আর্টজম বি।


8

কিছুক্ষণ আগে একই সমস্যা ছিল, আমার সমস্যা ছিল, আমার কেবল বেস ইউআরএল প্রয়োজন। এখানে প্রচুর বিস্তারিত বিকল্প রয়েছে তবে এটিকে ঘিরে ধরার জন্য কেবল window.locationঅবজেক্টটি ব্যবহার করুন । আসলে এটি ব্রাউজার কনসোলে টাইপ করুন এবং সেখানে আপনার বিকল্পগুলি নির্বাচন করতে এন্টার টিপুন। আমার ক্ষেত্রে এটি সহজ ছিল:

window.location.origin

7
var getUrl = window.location;
var baseurl = getUrl.origin; //or
var baseurl =  getUrl.origin + '/' +getUrl.pathname.split('/')[1]; 

তবে আপনি বলতে পারবেন না যে কোডআইগনিটার (বা পিএইচপি জুমলা) এর বেসুরল () একই মান প্রদান করবে, কারণ এই ফ্রেমওয়ার্কগুলির .htaccess ফাইলে বেসুরল পরিবর্তন করা সম্ভব change

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

আপনার লোকালহোস্টে যদি এই জাতীয় একটি .htaccess ফাইল থাকে:

RewriteEngine on
RewriteBase /CodeIgniter/
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

$ এটি-> বেসুরল () http: // লোকালহোস্ট / কোডইগনিটার / ফিরিয়ে দেবে


6

আমি বেশ কয়েকটি জুমলা প্রকল্পে এই প্রয়োজনটি চালিয়েছি। আমি যে সহজ ঠিকানাটি খুঁজে পেয়েছি তা হ'ল আমার টেমপ্লেটে একটি লুকানো ইনপুট ক্ষেত্র যুক্ত করা:

<input type="hidden" id="baseurl" name="baseurl" value="<?php echo $this->baseurl; ?>" />

যখন আমার জাভাস্ক্রিপ্টে মান দরকার:

var baseurl = document.getElementById('baseurl').value;

খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করার মতো অভিনব নয়, সহজ এবং কাজটি সম্পন্ন করে।



3

আমি প্রত্যেককে বিকাশের ক্ষেত্রে এইচটিএমএল বেস ট্যাগ তৈরি করার পরামর্শ দেব, তারপরে গতিময়ভাবে href বরাদ্দ করুন, সুতরাং কোনও ক্লায়েন্ট যে হোস্ট ব্যবহার করে তা উত্পাদনে এটি স্বয়ংক্রিয়ভাবে এটিকে যুক্ত করবে:

<html>
 <title>Some page title</titile>
  <script type="text/javascript">
    var head  = document.getElementsByTagName('head')[0];
    var base = document.createElement("base");
    base.href = window.document.location.origin;
    head.appendChild(base);
  </script>
 </head>
 ...

সুতরাং আপনি যদি স্থানীয়হোটে থাকেন: 8080, আপনি বেস থেকে প্রতিটি সংযুক্ত বা রেফারেন্সযুক্ত ফাইলের কাছে পৌঁছে যাবেন, উদাহরণস্বরূপ: http://localhost:8080/some/path/file.html আপনি যদি www.example.com এ থাকেন তবে এটি হবেhttp://www.example.com/some/path/file.html

এছাড়াও মনে রাখবেন, যে আপনি যে অবস্থানটি আছি, আপনি hrefs মধ্যে globs মত রেফারেন্স ব্যবহার করা উচিত নয় উদাহরণ: মূল অবস্থান ঘটায় http://localhost:8080/না http://localhost:8080/some/path/

আপনি পূর্ব ইউআরএল ছাড়াই সমস্ত হাইপারলিংককে সম্পূর্ণ সাজা হিসাবে উল্লেখ করেছেন tent


3

ফর্ম্যাটটি হোস্টনাম / পথের নাম / অনুসন্ধান

ইউআরএলটি হ'ল:

var url = window.location.hostname + window.location.pathname + window.location.hash

আপনার ক্ষেত্রে

window.location.hostname = "stackoverflow.com"
window.location.pathname ="/questions/25203124/how-to-get-base-url-with-jquery-or-javascript"
window.location.hash = ""

সুতরাং মূলত বেসুরল = হোস্টনাম = উইন্ডো.লোকেশন.হোস্টনাম


3

আমি অবাক হয়েছি যে কোনও উত্তর না থাকলে বেস urlটিকে <base>ট্যাগ হিসাবে সেট করা থাকলে তা বিবেচনা করে । সমস্ত বর্তমান উত্তর হোস্টের নাম বা সার্ভারের নাম বা ঠিকানার প্রথম অংশ পাওয়ার চেষ্টা করে। এটি সম্পূর্ণ যুক্তি যা <base>ট্যাগটিকেও বিবেচনা করে (যা অন্য কোনও ডোমেন বা প্রোটোকলের সাথে সম্পর্কিত হতে পারে):

function getBaseURL(){
  var elem=document.getElementsByTagName("base")[0];
  if (typeof(elem) != 'undefined' && elem != null){
     return elem.href;
  }
  return window.location.origin;
}

জ্যাকারি ফর্ম্যাট:

function getBaseURL(){
  if ($("base").length){
     return $("base").attr("href");
  }
  return window.location.origin;
}

উপরের যুক্তিযুক্ত না জড়িয়ে শর্টহ্যান্ড সমাধান যা উভয় <base>ট্যাগ এবং window.location.origin:

js:

var a=document.createElement("a");
a.href=".";
var baseURL= a.href;

jQuery:

var baseURL= $('<a href=".">')[0].href

চূড়ান্ত দ্রষ্টব্য: আপনার কম্পিউটারে কোনও স্থানীয় ফাইলের জন্য (হোস্টে নয়) window.location.originকেবলমাত্র ফেরত দেয় file://তবে উপরের সর্চেন্ড সমাধানটি সম্পূর্ণ সঠিক পথে ফেরত দেয়।


1
এটি সেরা উপায় নয়। এছাড়াও, @ ড্যানিলসাময়লোভের উত্তর দেখুন, যা <base>উপাদানটি অন্তর্ভুক্ত করে ।
ব্র্যাড

বেসুরি কোনও নোডের বেস ইউআরএল ফিরিয়ে দেয় তাই এই ক্ষেত্রে এটি বেস পাথ + ডকুমেন্টের নাম দেয়। সেই ইউআরএল থেকে দস্তাবেজের নাম সরানোর জন্য আপনার আরও কোডের প্রয়োজন হবে। @ ব্র্যাড
আলী শেখপূর

ওয়েব পৃষ্ঠার মূল ডিরেক্টরি একটি উপ ডিরেক্টরিের মধ্যে থাকা অবস্থায় এই সমাধানটি সঠিক বেস ইউআরএল ফেরত দেয় না (যেমন, উদাহরণস্বরূপ: // অ্যাপল রুট )। এটি কেবল তখনই কার্যকর হয় যখন ওয়েবপৃষ্ঠার রুট ডির সরাসরি ওয়েবহোস্টের রুটে থাকে।
মাইকেল হাফনার

2
window.location.origin+"/"+window.location.pathname.split('/')[1]+"/"+page+"/"+page+"_list.jsp"

জেনিশ উত্তর মত প্রায় একই কিন্তু একটি ছোট।


2

আমি ঠিক একই মঞ্চে ছিলাম এবং এই সমাধানটি আমার পক্ষে কাজ করে

দেখুন মধ্যে

<?php
    $document = JFactory::getDocument();

    $document->addScriptDeclaration('var base = \''.JURI::base().'\'');
    $document->addScript('components/com_name/js/filter.js');
?>

জেএস ফাইলে আপনি baseআপনার দৃশ্যের উদাহরণ হিসাবে চলক হিসাবে অ্যাক্সেস করতে পারেন :

console.log(base) // will print
// http://www.example.com/
// http://localhost/example
// http://www.example.com/sub/example

ক্রেডিট দেওয়ার জন্য আমি এই তথ্যটি কোথায় নিয়েছি তা মনে নেই, আমি যদি এটি খুঁজে পাই তবে আমি উত্তরটি সম্পাদনা করব



1

এখানে কিছু দ্রুত যা file://ইউআরএলগুলির সাথেও কাজ করে ।

আমি এই ওয়ান-লাইনারটি নিয়ে এসেছি:

[((1!=location.href.split(location.href.split("/").pop())[0].length?location.href.split(location.href.split("/").pop())[0]:(location.protocol,location.protocol+"//" + location.host+"/"))).replace(location.protocol+"//"+location.protocol+"//"+location.protocol+"://")]

0

আপনি উল্লেখ করেছেন যে এর example.comপরিবর্তন হতে পারে তাই আমি সন্দেহ করি যে আপনার স্ক্রিপ্টগুলির জন্য আপেক্ষিক পাথ স্বরলিপিটি ব্যবহার করতে সক্ষম হওয়ার জন্য আপনার অবশ্যই বেস url দরকার need এই বিশেষ ক্ষেত্রে স্ক্রিপ্টিং ব্যবহার করার দরকার নেই - পরিবর্তে আপনার শিরোনামে বেস ট্যাগ যুক্ত করুন:

<head>
  <base href="http://www.example.com/">
</head>

আমি সাধারণত পিএইচপি এর মাধ্যমে লিঙ্কটি উত্পন্ন করি।


0

যদি কেউ এই শক্তিশালী কোনও কার্যকরী অংশটি দেখতে চান

    function getBaseURL() {
        var loc = window.location;
        var baseURL = loc.protocol + "//" + loc.hostname;
        if (typeof loc.port !== "undefined" && loc.port !== "") baseURL += ":" + loc.port;
        // strip leading /
        var pathname = loc.pathname;
        if (pathname.length > 0 && pathname.substr(0,1) === "/") pathname = pathname.substr(1, pathname.length - 1);
        var pathParts = pathname.split("/");
        if (pathParts.length > 0) {
            for (var i = 0; i < pathParts.length; i++) {
                if (pathParts[i] !== "") baseURL += "/" + pathParts[i];
            }
        }
        return baseURL;
    }

এটি কেবল পুরো url দেয়। কোনও বেস ইউআরএল নয়।
স্যাম

সত্যিই, আমি নিশ্চিত ছিলাম যে আমি কোথায় যাচ্ছিলাম। আমি দীর্ঘদিন থেকে সার্ভার-সাইড কোডটি দিয়ে সেটিংয়ে
চলেছি

0

সহজ

$('<img src=>')[0].src

খালি এসআরসি-নাম সহ একটি ইমিগ উত্পন্ন করে ব্রাউজারকে নিজেই বেস-url গণনা করতে বাধ্য করে, আপনার কাছে /index.htmlবা অন্য কিছু নেই তা বিবেচনা করে।


এটি সকলের মধ্যে সবচেয়ে মার্জিত সমাধান এবং একমাত্র ব্রাউজার যুক্তিকে নকল করে না এমনটি মনে হয়, যা দুর্দান্ত। আমি অবাক হই যে এটি কতটা পোর্টেবল। এইচটিএমএল চশমাগুলিতে এমন কোনও কি আছে যা সুপারিশ করবে যে এটি সমস্ত ব্রাউজারে কাজ করার গ্যারান্টিযুক্ত?
ম্যাথিজস कूইজমান

@ ম্যাথিজসকুইজমান এইচটিএমএল স্পেসের ব্যাখ্যার উপর নির্ভরশীল। আপনি যদি বলেন 0 দৈর্ঘ্যের একটি ফাইল নাম একটি বৈধ উত্স-নাম ... এটি সমস্ত ব্রাউজারের সাথে মেলে।
গ্রিম

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


-4

এটি আপনার শিরোনামে রাখুন, সুতরাং আপনার যখনই এটি প্রয়োজন হবে তখন এটি উপলব্ধ থাকবে।

var base_url = "<?php echo base_url();?>";

আপনি পাবেন http://localhost:81/your-path-fileবা http://localhost/your-path-file

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