পৃষ্ঠাটি রিফ্রেশ না করে ব্রাউজারের ঠিকানা বার পরিবর্তন করার কোনও উপায় আছে কি?


92

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

ব্যবহারকারী বিভাগটি ক্লিক করার পরে আমি ব্রাউজারের ঠিকানা বারের url পরিবর্তন করতে চাই

www.mysite.com/products 

মত কিছু

www.mysite.com/products/{selectedCat} 

পৃষ্ঠাটি রিফ্রেশ না করে।
এটি অর্জনের জন্য আমি কীভাবে জাভাস্ক্রিপ্ট এপিআই ব্যবহার করতে পারি?

উত্তর:


158

এইচটিএমএল 5 দিয়ে আপনি পুনরায় লোড না করেই url পরিবর্তন করতে পারেন:

আপনি যদি ব্রাউজারের ইতিহাসে একটি নতুন পোস্ট করতে চান (তবে পিছনে বোতামটি কাজ করবে)

window.history.pushState('Object', 'Title', '/new-url');

আপনি যদি ফিরে যেতে না সক্ষম হয়ে url পরিবর্তন করতে চান

window.history.replaceState('Object', 'Title', '/another-new-url');

এজ্যাক্সটি এজ্যাক্স নেভিগেশনের জন্য ব্যবহার করা যেতে পারে:

window.history.pushState({ id: 35 }, 'Viewing item #35', '/item/35');

window.onpopstate = function (e) {
  var id = e.state.id;
  load_item(id);
};

এখানে আরও পড়ুন: http://www.w3.org/TR/html5-author/history.html

একটি ফ্যালব্যাক সলিউশন: https://github.com/browserstate/history.js


4
+1 এছাড়াও নোট; এগুলি pathএবং / অথবা query stringইউআরএল পরিবর্তন করে ; তারা প্রোটোকল, ডোমেন বা পোর্ট পরিবর্তন করতে পারে না (কারণ এটি সুরক্ষা সমস্যা যেমন অন্যরা দেখিয়েছে)। hashফাংশন উপরে নোঙ্গর (অথবা টুকরা ID) পরিবর্তন করতে পারেন
ক্রিস এস

4
শুধু বলছি, আপনার উদাহরণে '/ আইটেম / 35'
in

পার্শ্ববর্তী প্রশ্ন হিসাবে, এই ইউআরএলগুলি গুগলকে তত্কালীন করে তোলার কোনও উপায় আছে কি?
পিটার ফেদারস্টোন

4
আরও ভাল লাইব্রেরিটি github.com/browserstate/history.js বলে মনে হচ্ছে এটি সক্রিয়ভাবে রক্ষণাবেক্ষণ এবং বহুল ব্যবহৃত হয় যেখানে ফোর্টস-হিস্ট্রি.জেস 3 বছরের জন্য অলস ছিল।
গনফি ড্যান স্যাচল

4
দয়া করে নোট করুন যে ফায়ারফক্স শিরোনাম সমর্থন করে না, সুতরাং ডকুমেন্ট.টাইটেল = "নতুন শিরোনাম" ব্যবহার করুন।
0fnt

31

ছেলেরা ইতিমধ্যে যা বলেছে তাতে যুক্ত করার জন্য আপনার অনক্লিক ফাংশনে আপনার যে URL টি চান তা মেলাতে উইন্ডো.লোকশন.হ্যাশ সম্পত্তিটি সম্পাদনা করুন।

window.location.hash = 'category-name'; // address bar would become http://example.com/#category-name

ইউআরএলে '#' চিহ্ন ছাড়া ইউআরএল পরিবর্তন করার কোনও উপায় আছে কি?
শেখর শীট

7

আমি বিশ্বাস করি যে সুরক্ষার কারণে আপনি যদি এতে খুশী হন তবে সুরক্ষিত কারণে সেই url এ না গিয়েই সরাসরি বারটিকে সম্পূর্ণ আলাদা ইউআরএলে সরাসরি পরিচালনা করার অনুমতি দেওয়া হয় না I

www.mysite.com/products/#{selectedCat}

অর্থাত্ একই পৃষ্ঠার মধ্যে অ্যাঙ্কর স্টাইলের লিঙ্কটি বিভিন্ন ইতিহাস / "পিছনে বোতাম" স্ক্রিপ্টগুলি দেখুন যা এখন বেশিরভাগ জাভাস্ক্রিপ্ট লাইব্রেরিতে উপস্থিত রয়েছে।

আপডেট প্যানেলের উল্লেখ আমাকে অনুমান করতে পরিচালিত করে যে আপনি এসপ নেট ব্যবহার করছেন, সেক্ষেত্রে অ্যাসপেট এজাজান ইতিহাস নিয়ন্ত্রণ শুরু করার জন্য ভাল জায়গা


3

আমি মনে করি না এটি সম্ভব (অন্তত সম্পূর্ণ ভিন্ন ঠিকানায় পরিবর্তন করা), কারণ এটি অ্যাড্রেস বারের অনিচ্ছাকৃত অপব্যবহার হবে এবং ফিশিং আক্রমণগুলিকে প্রচার করতে পারে।


অনিচ্ছুক হওয়ার পরিবর্তে, আমি মনে করি আপনি এটি করতে সক্ষম হবেন না কারণ এটি ফিশিং আক্রমণগুলির জন্য অপব্যবহার করা যেতে পারে। যাইহোক, এটি +1।
অরেগনঘস্ট

হ্যাঁ, এটি আমার কাছে ঘটেছিল। ভালো বুদ্ধি নই. ধন্যবাদ ওরেগনগোস্ট।
গ্যালিশিয়ান

4
আমি কি মনে করি তার সম্ভাব্য ... আউট উইকিম্যাপিয়া চেক করুন ... আপনার চারপাশের মানচিত্রটাকে টেনে হিসাবে, URL টি পরিবর্তিত পরার ...
Shivasubramanian একজন

@ শিবসুব্রাহ্মণ্য-আ: আমি উইকিমাপিয়াটির দিকে চেয়েছিলাম, এবং প্রকৃতপক্ষে, তারা কেবল সোম দ্বারা প্রস্তাবিত কৌশলটি ব্যবহার করেছে এবং স্যাঁচোথেফাত দ্বারা বর্ণিত: কেবল অ্যাঙ্কারের নাম পরিবর্তন করা। যা ফিশিংয়ের বিরুদ্ধে নিরাপদ ...
ফিলিহো

-1

আপনি যেভাবে বলছেন এটি এটি করা যায় না। Somej.net দ্বারা প্রস্তাবিত পদ্ধতিটি আপনি পেতে পারেন নিকটতম। এটি এজেএক্স যুগে আসলে খুব সাধারণ অনুশীলন। এমনকি Gmail এটি ব্যবহার করে।


-1

"window.location.hash"

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

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