জাভাস্ক্রিপ্টে উইন্ডো.লোকশন এবং ডকুমেন্ট.লোকেশনের মধ্যে পার্থক্য কী?


উত্তর:


220

ডাব্লু 3 সি অনুসারে, তারা একই রকম। বাস্তবে, ক্রস ব্রাউজার সুরক্ষার জন্য, আপনার window.locationপরিবর্তে ব্যবহার করা উচিত document.location

দেখুন: http://www.w3.org/TR/html/browsers.html#dom-location


12
Downvoted। উত্তর স্ববিরোধী। এটি সাহসের সাথে বলে যে তারা একই, তারপরে হালকা পাঠ্যের পার্থক্য বর্ণনা করে। তারা স্থিরভাবে এক নয়।
ড্যানরটন

33
সি'মোন ট্রিগার-হ্যাপি ডাউন ভোটারগণ, কিছুটা হালকা করুন। বেশিরভাগ ক্ষেত্রে, তারা রাহুল দ্বারা নির্ধারিত ক্যাভেটটি বিবেচনা করে একইভাবে আচরণ করে। আসুন তাকে শব্দার্থবিজ্ঞানে পেরেক দিই না। একটু ফিলাডেলফিয়া, ভদ্রলোক। আমি একজনের পক্ষে তার উত্তরটি পুরোপুরি সন্তুষ্টিজনক পেয়েছি। +1 (ক্রিস্টোফের গ্রহণযোগ্য উত্তর হওয়া উচিত, তবে রাহুলের গ্রহণযোগ্যতা রয়েছে - কমপক্ষে, ডাউন-ভোটের জন্য উপযুক্ত নয়))
সিএসফাস

7
-1 এর জন্য window.locationকোনও যুক্তি সরবরাহ না করে সেরা অনুশীলনের (সর্বদা ব্যবহারের ) প্রস্তাব দেওয়ার জন্য। আপনি যদি ন্যায়সঙ্গততা প্রদান না করেন তবে কেন কেউ আপনার পরামর্শ নেবেন? ক্রিস্টফের উত্তর এক্ষেত্রে অনেক বেশি কার্যকর।
মার্ক অ্যামেরি

+1 তবে নীচে ফিল হামার এবং ক্রিস্টোফের উত্তরগুলি দেখুন, তারা ইস্যুটিকে পুরোপুরি বোঝার জন্য প্রয়োজনীয় ব্যাকগ্রাউন্ড তথ্য এবং সতর্কতা যুক্ত করে।
জন z

প্রকৃতপক্ষে আমি উভয়ের মধ্যে পার্থক্য লক্ষ্য করেছি, উদাহরণস্বরূপ, আপনি যদি কোনও শিশু ফ্রেম থেকে একটি স্যান্ডবক্সযুক্ত ফ্রেমে নেভিগেশন করতে চান তবে আপনি এটি ডকুমেন্ট.লোকেশন দিয়ে করতে পারেন তবে উইন্ডো.লোকেশন দিয়ে নয়
এমআলসউদ

207

বর্তমান অবস্থানের অবজেক্টটি পাওয়ার মূল বিষয় হ'ল window.location( ১৯৯ MS সালের এই এমএসডিএন পৃষ্ঠা এবং ২০০ from সালের ডাব্লু 3 সি খসড়া দেখুন )।

এর সাথে এই তুলনা করুন document.location, যা মূলত কেবলমাত্র বর্তমান ইউআরএলকে স্ট্রিং হিসাবে ফিরিয়ে দিয়েছে ( এমএসডিএন-তে এই পৃষ্ঠাটি দেখুন )। সম্ভবত বিভ্রান্তি এড়াতে, document.locationপ্রতিস্থাপন করা হয়েছিল document.URL( এখানে এমএসডিএন দেখুন ), যা ডিওএম স্তর 1 এরও একটি অংশ ।

যতদূর আমি জানি, সমস্ত আধুনিক ব্রাউজারগুলি মানচিত্র document.locationকরে window.locationতবে আমি window.locationপ্রথম ডিএইচটিএমএল লেখার পর থেকে আমি এটি ব্যবহার করেছি।


1
আপনি যদি ব্যবহার করেন তবে window.locationএটি locationকি কেবল ব্যবহারের জন্য সমানভাবে বৈধ নয় ?
কমনপাইক

2
@ কমপোনপাইক এটি - একটি এইচটিএমএল নথিতে [কমপক্ষে] একটি স্ক্রিপ্টের প্রসঙ্গে, বিশ্বব্যাপী অবজেক্ট যেখানে সমস্ত সংজ্ঞায়িত ভেরিয়েবলগুলি সম্পত্তি হয়ে যায়, এটি হ'ল windowঅবজেক্ট। সুতরাং, আপনার স্ক্রিপ্টের শীর্ষ স্তরে আপনি যে কোনও পরিবর্তনশীল বা ফাংশনটি সংজ্ঞায়িত করেন তা হ'ল রেফারেন্স করা অবজেক্টের সম্পত্তি window, যা বৈশ্বিক অবজেক্ট হিসাবে ঘটে। যেমন অনুপস্থিত মত গ্লোবাল অবজেক্ট নিহিত window.- সুতরাং locationএটি ব্যাখ্যা করা হয় window.location। ক্যাভেটস - ফে if(an_undefined_variable)যদি ভেরিয়েবল সংজ্ঞায়িত না হয় - ত্রুটি ঘটায় if(window.an_undefined_variable)
amn

92

উইন্ডো.লোকেশনটি সমস্ত কমপ্লায়েন্ট ব্রাউজারগুলিতে পড়তে / লিখতে হয়।

ডকুমেন্ট.এলোকেশন কেবলমাত্র ইন্টারনেট এক্সপ্লোরারে (কমপক্ষে) পঠনযোগ্য তবে গেকো-ভিত্তিক ব্রাউজারগুলিতে (ফায়ারফক্স, সিমনকি) পড়ুন / লিখুন।


10
আমি যে দাবী document.locationকেবলমাত্র আইই-তে পড়ি তা পুনরুত্পাদন করতে পারি না । আমি এটি সফলভাবে আইই 10, 9, 8 এবং 6 এ অর্পণ করতে পারি ( আধুনিক . ie থেকে ভিএম ব্যবহার করে )।
মার্ক অ্যামেরি

কোন মন্তব্য console.log(location);? !!
Fr0zenFyr

44

document.locationমূলত একটি পঠনযোগ্য সম্পত্তি ছিল, যদিও গেকো ব্রাউজারগুলি আপনাকে এটিকেও নির্ধারণের অনুমতি দেয়। ক্রস ব্রাউজার সুরক্ষার জন্য, window.locationপরিবর্তে ব্যবহার করুন।

আরও পড়ুন:

document.location

window.location



37

মজার বিষয় হল, যদি আপনার কাছে 'অবস্থান' নামে একটি ফ্রেম, চিত্র বা ফর্ম থাকে তবে লোকেশন অবজেক্টের পরিবর্তে 'ডকুমেন্ট.লোকশন' যথাক্রমে ফ্রেম উইন্ডো, চিত্র বা ফর্মের জন্য একটি রেফারেন্স সরবরাহ করে। স্পষ্টতই, কারণ ডকুমেন্ট.ফর্ম, ডকুমেন্ট.ইমেজ এবং উইন্ডো.ফ্রেমস সংগ্রহের নাম অনুসন্ধান উইন্ডো.লোকেশনে ম্যাপিংয়ের চেয়ে অগ্রাধিকার পায়।

<img name='location' src='location.png'>

if (document.location.tagName == 'IMG') alert('Hello!')

2
কোনও অগ্রাধিকার নেই, এটি কেবল ওভাররাইট করা হয়েছে
পেসারিয়ার

7
না, এটি ওভাররাইট করা হয়নি। এটি ছায়া গোছানো, তাই ফিল সম্পত্তি নিষ্পত্তির সময় উপাদানটিকে প্রাধান্য দেওয়ার বিষয়ে ঠিক।
কঙ্গাক্স

@ কংগ্যাক্স, আপনার মতো মনে হচ্ছে ঠিক: jsfiddle.net/uL4ysszr । তবে এই আচরণটি কতটা নির্ভরযোগ্য? এটি কি যথেষ্ট ক্রস ব্রাউজার?
পেসারিয়ার

1
সবেমাত্র এটি পরীক্ষা করা হয়েছে (অক্টোবর 2016)। এটি প্রদর্শিত হয় window.locationএবং document.locationChrome এবং ফায়ারফক্সে ছায়া দেওয়া যায় না।
মিঃ লালমা

1
@ মিঃল্লামা আপনি ঠিক বলেছেন। দেখা যাচ্ছে যে সমস্ত আধুনিক ব্রাউজারগুলি আমি উপরে বর্ণিত পদ্ধতিতে আচরণ করে না। এটি ডকুমেন্ট দেওয়ার কারণে বলে মনে হচ্ছে oc লোকেশন "অবিস্মরণীয়" বৈশিষ্ট্যটি। প্রাসঙ্গিক ক্রোমিয়াম পরিবর্তন: src.chromium.org/viewvc/blink?view=revision&revision=189862 এবং ফায়ারফক্স বাগ: bugzilla.mozilla.org/show_bug.cgi?id=1133760
ফিল হামার

27

আমি যতদূর জানি উভয়ই এক রকম। ক্রস ব্রাউজার সুরক্ষার জন্য আপনি এর window.locationচেয়ে ব্যবহার করতে পারেন document.location

সমস্ত আধুনিক ব্রাউজারগুলি এতে মানচিত্র document.locationরাখে window.locationতবে আমি window.locationআমার প্রথম ওয়েব পৃষ্ঠা লেখার পর থেকে এখনও এটিই পছন্দ করি। এটি আরও সামঞ্জস্যপূর্ণ।

আপনি document.location === window.locationরিটার্নও দেখতে পাবেন true, যা স্পষ্ট করে যে উভয়ই সমান।


14

document.location === window.location আয় true

এছাড়াও

document.location.constructor === window.location.constructor হয় true

দ্রষ্টব্য: সবেমাত্র পরীক্ষিত, ফায়ারফক্স 3.6, অপেরা 10 এবং আই 6


1
@ পেসারী কেন? বস্তুর জন্য, ===এবং ==সমতুল্য।
মার্ক অ্যামেরি

4
@ মার্ক অ্যামেরি, এটি ভুল এবং সহজেই প্রদর্শিত হতে পারে: "abc" == new String("abc")ফেরার trueসময় "abc" === new String("abc")ফিরে আসে false
পেসারিয়ার

7
@ পেসিয়ার ঠিক আছে, আমাকে কিছুটা কড়া এবং কম অস্পষ্টতার সাথে বলতে পারি: দুটি বস্তুর একে অপরের সাথে তুলনা করার সময় (কোনও কিছুর সাথে কেবল একটি বস্তুর চেয়ে) তুলনা করা ==এবং ===সমতুল্য। দেখুন বৈশিষ্ট বিভাগে 11.9.3 এবং 11.9.6। অ নাল জন্য, অ undefined, অ-নম্বর, অ bool, একই ধরনের সঙ্গে অ স্ট্রিং মূল্যবোধ, ==আচার-আচরণ 11.9.3 অংশ 1F, এবং দ্বারা নিয়ন্ত্রিত হয় ===আচরণ 11.9.6 অংশ 7, যা অভিন্নরুপে পড়া দ্বারা রিটার্ন trueযদি x এবং y একই বস্তুকে বোঝায়। অন্যথায়, ফিরে false
মার্ক আমেরিকা

10
@ মার্ক অ্যামেরি, এর কোনও গ্যারান্টি নেই যে উভয়ই document.locationএবং window.locationবস্তুগুলিকে নির্দেশ করছে। আপনি ট্রিপল সমান পুরো পয়েন্ট মিস করছেন; 2 টি সমান ব্যবহার প্রমাণ করে না যে তারা একই আপত্তি। আমাদের 3 টি সমান নয় 2 টি সমান ব্যবহার করা উচিত কারণ 2 সমান আমাদের একটি মিথ্যা ধনাত্মক দেয়। যে ব্রাউজারে ডকুমেন্ট.লোকশনটি ইউআরএল স্ট্রিং এর সমান window.location.toString(), তারপরে document.location==window.locationসত্য document.location===window.locationফিরে আসবে এবং মিথ্যা ফিরে আসবে।
পেসারিয়ার

@ পেসিয়ার আহা - আমি শেষ পর্যন্ত পেয়েছি। আপনি যথেষ্ট সঠিক, কমপক্ষে যতটা document.location === window.locationতুলনা যায়। সত্য যে .constructorতুলনা খুব মানে নিক্ষিপ্ত হয়, আমি মনে করি, এই উত্তর তবুও শব্দ, কিন্তু ব্যবহার ===যুক্তি প্রক্রিয়া সহজ হবে।
মার্ক আমেরিকা

11

হ্যাঁ, তারা একই। এটি ব্রাউজার জেএস এপিআইয়ের অনেক historicalতিহাসিক কৌতূহলগুলির মধ্যে একটি। করার চেষ্টা করুন:

window.location === document.location

8

উইন্ডো.লোকেশন পুরানো ব্রাউজারগুলি বিবেচনা করে দুটির সাথে আরও নির্ভরযোগ্যভাবে সামঞ্জস্যপূর্ণ।


3

আজকাল পার্থক্যটি দেখা বিরল কারণ এইচটিএমএল 5 আর ফ্রেমসেট সমর্থন করে না। তবে যখন আমাদের ফ্রেমসেট ছিল, ডকুমেন্ট.লোকেশন কেবল সেই ফ্রেমে পুনর্নির্দেশ করবে যেখানে কোডটি কার্যকর করা হচ্ছে এবং উইন্ডো.লোকেশন পুরো পৃষ্ঠাটি পুনর্নির্দেশ করবে।


2

আমি বলব window.locationবর্তমান ইউআরএল পাওয়ার আরও নির্ভরযোগ্য উপায় । অনুসরণ মধ্যে পার্থক্য window.locationএবং document.urlযে পরিস্থিতিতে যেখানে আমি URL- এ হ্যাশ পরামিতি সংযোজন করা হয় এবং পরে এটি পড়া এক সামনে আসেন।

ইউআরএলে হ্যাশ প্যারামিটার যুক্ত করার পরে।

পুরানো ব্রাউজারে, আমি ইউআরএল থেকে হ্যাশ প্যারামিটারগুলি ব্যবহার করে সক্ষম করতে document.urlপারি নি, তবে আমি যখন ব্যবহার করি window.locationতখন আমি ইউআরএল থেকে হ্যাশ প্যারামিটার পেতে সক্ষম হয়েছি।

সুতরাং এটি ব্যবহার করা সর্বদা ভাল window.location


1
-1। প্রশ্নটিও উল্লেখ করেনি document.URL- এটি ছিল window.locationএবং সম্পর্কে document.location। এছাড়াও, document.urlবিদ্যমান নেই = এটি বড় হাতের হওয়া উচিত।
মার্ক অ্যামেরি

2

document.location.constructor === window.location.constructorহয় true

এটি কারণ এটি দেখতে আপনি দেখতে পারেন ঠিক একই জিনিস document.location===window.location

সুতরাং কনস্ট্রাক্টর বা অন্য কোনও সম্পত্তির তুলনা করার দরকার নেই।


2

কমপক্ষে IE এ, স্থানীয় ফাইলের সাথে এটির কিছুটা পার্থক্য রয়েছে:

ডকুমেন্ট.ইউআরএল "ফাইল: // সি: \ প্রকল্পগুলি c abc \ a.html" ফিরিয়ে দেবে

"

একটি ব্যাক স্ল্যাশ, একটি ফরোয়ার্ড স্ল্যাশ।


2

আচ্ছা হ্যাঁ, তারা একই, কিন্তু ....!

window.location কিছু ইন্টারনেট এক্সপ্লোরার ব্রাউজারে কাজ করছে না।


0

বেশিরভাগ লোকেরা এখানে সুপারিশ করা সত্ত্বেও, গুগল অ্যানালিটিক্সের ডায়নামিক প্রোটোকলগুলি যুগে যুগে দেখতে এলো (তারা সম্প্রতি ga.js থেকে বিশ্লেষণ.জেজে স্থানান্তরিত হওয়ার আগে):

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

আরও তথ্য: https://developers.google.com/analytics/devguides/collection/gajs/

নতুন সংস্করণে তারা '//' ব্যবহার করেছে যাতে ব্রাউজার স্বয়ংক্রিয়ভাবে প্রোটোকল যুক্ত করতে পারে:

'//www.google-analytics.com/analytics.js'

সুতরাং গুগল যদি জেএস-এ প্রোটোকলের প্রয়োজন হয় তখন ডকুমেন্ট- লোকেশনকে পছন্দ করে তবে window.locationআমার ধারণা তাদের কাছে এর কিছু কারণ রয়েছে।

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


2
যাইহোক, আমি হ্রাস করি নি, কারণ এটি সত্যিই একটি পুরানো প্রশ্ন এবং আপনার উত্তরটি এমন কোনও নতুন বা মূল্যবান প্রমাণ সরবরাহ করে না যা একজনের চেয়ে অন্যটির চেয়ে ভাল। বা, এটি হতে পারে কারণ গুগল historতিহাসিকভাবে যা করেছে তার যোগ্যতা আপনি নির্ধারণ না করেই আপনার উত্তর জনমতের বিপরীত প্রস্তাব দেয়। অথবা, এটি এমনও হতে পারে যে ডাউনভোটার কেবল পছন্দ করেন নি আপনি কীভাবে আপনার উত্তরের অংশগুলিতে জোর দিয়েছিলেন যা জোর দিয়ে জোর দেওয়ার প্রয়োজন হয় না। সত্যিই কিছু হতে পারে। এটিই বেনামে ভোট দেওয়ার সৌন্দর্য।
এমব্যাবকক

0

প্রকৃতপক্ষে আমি উভয়ের মধ্যে ক্রোমের পার্থক্য লক্ষ্য করেছি, উদাহরণস্বরূপ আপনি যদি কোনও শিশু ফ্রেম থেকে একটি স্যান্ডবক্সযুক্ত ফ্রেমে নেভিগেশন করতে চান তবে আপনি এটি কেবল ডকুমেন্ট.এলোকেশন দিয়ে করতে পারেন তবে উইন্ডো.লোকশন দিয়ে নয়

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