এইচটিএমএল 5 ইতিহাস এপিআই (পুশস্টেট?) ব্যবহারের জন্য টিউটোরিয়াল [বন্ধ]


168

আমি এজেএক্স লোডযুক্ত সামগ্রীর সাথে গভীর লিঙ্কিং সমস্যার সমাধান করতে এইচটিএমএল 5 ইতিহাস এপিআই ব্যবহার করে যাচ্ছি, তবে আমি স্থল থেকে নামার জন্য লড়াই করছি। কেউ কি কোনও ভাল সংস্থান সম্পর্কে জানেন?

আমি এটি ব্যবহার করতে চাই কারণ লিঙ্কগুলি প্রেরণকারীদের জেএস চালু না হওয়ার সম্ভাবনাটি মঞ্জুর করার দুর্দান্ত উপায় বলে মনে হচ্ছে। জেএস সহ কেউ যদি কাউকে ছাড়াই কোনও লিঙ্ক পাঠায় তখন অনেকগুলি সমাধান ব্যর্থ হয়।

আমার প্রাথমিক গবেষণাটি জেএসের মধ্যে কোনও হিস্ট্রি এপিআই এবং পুশস্টেট পদ্ধতিতে ইঙ্গিত করেছে বলে মনে হচ্ছে।

http://html5demos.com/history

উত্তর:


181

একটি দুর্দান্ত টিউটোরিয়ালের জন্য এই কার্যকারিতাটির মোজিলা বিকাশকারী নেটওয়ার্ক পৃষ্ঠাটি আপনার কেবলমাত্র দরকার: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

দুর্ভাগ্যক্রমে, এইচটিএমএল 5 ইতিহাস এপিটিআইএল এটি সমস্ত HTML5 ব্রাউজারগুলিতে আলাদাভাবে প্রয়োগ করা হয়েছে (এটিকে বেমানান এবং বগীযুক্ত করে) এবং এইচটিএমএল 4 ব্রাউজারগুলির কোনও ফলব্যাক নেই। ভাগ্যক্রমে, ইতিহাস.js এইচটিএমএল 5 ব্রাউজারগুলির জন্য ক্রস-সামঞ্জস্যতা সরবরাহ করে (সমস্ত HTML5 ব্রাউজারগুলি প্রত্যাশা অনুযায়ী কাজ করে) এবং allyচ্ছিকভাবে এইচটিএমএল 4 ব্রাউজারগুলিতে (ডেটা, শিরোনাম, পুশস্টেট এবং রিপ্লেসমেট কার্যকারিতা রক্ষণাবেক্ষণ সমর্থন সহ) হ্যাশ-ফ্যালব্যাক সরবরাহ করে।

আপনি এখানে ইতিহাস.js সম্পর্কে আরও পড়তে পারেন: https://github.com/browserstate/history.js

হাশব্যাংস ভিএস হ্যাশ ভিএস এইচটিএমএল 5 ইতিহাস এপিআই সম্পর্কে একটি নিবন্ধের জন্য, এখানে দেখুন: https://github.com/browserstate/history.js/wiki/Inte Fightnt- স্ট্যাট- হ্যান্ডলিং


25
নির্লজ্জ স্ব-প্লাগ। যদিও দুর্দান্ত পোস্ট এবং প্লাগইন। :)
পুরাগ

33

'ডাইভ ইন এইচটিএমএল 5' থেকে আমি অনেক উপকৃত হয়েছি। ব্যাখ্যা এবং ডেমো সহজ এবং বিন্দু। ইতিহাস অধ্যায় - http://diveintohtml5.info/history.html এবং ইতিহাস ডেমো - http://diveintohtml5.info/example/history/fer.html


1
সত্যিই দুর্দান্ত টিউটোরিয়াল। এর মধ্যেই ইউআরএল ডিভইন্টোhtml5.info হয়ে গেছে ; উত্তরটি আপডেট করতে চাইবে।
ড্যান ড্যাসক্লেস্কু

28

এইচটিএমএল 5 পুশস্টেট ব্যবহার করার সময় মনে রাখবেন যে কোনও ব্যবহারকারী যদি কোনও গভীর লিঙ্ক অনুলিপি করে বা বুকমার্ক করে এবং এটি আবার দেখা করে, তবে এটি সরাসরি সার্ভার হিট হবে যা 404 হবে সুতরাং আপনার এটির জন্য প্রস্তুত থাকা প্রয়োজন এমনকি একটি পুশস্টেট জেএস লাইব্রেরিও সহায়তা করবে না আপনি. সবচেয়ে সহজ সমাধানটি হ'ল আপনার এনগিনেক্স বা অ্যাপাচি সার্ভারে নতুন করে লেখার নিয়ম যুক্ত করা:

অ্যাপাচি (যদি আপনি এটি ব্যবহার করেন তবে আপনার ভোস্টে):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
 </IfModule>

nginx

rewrite ^(.+)$ /index.html last;

এটিই আসল উত্তর। এটি বালুপটনের ইতিহাস.জে উইকি / টিউটোরিয়াল ইত্যাদির কোথাও নেই In বাস্তবে, ইতিহাস.js হ্যাশ ব্যবহার করে না তাই আপনাকে .htaccess redirection ব্যবহার করা দরকার!
অ্যাড্রেডেনাট

13
আদর্শভাবে আপনার সার্ভার / অ্যাপ্লিকেশনটিকে এই পুনর্লিখনের প্রয়োজন ছাড়াই উপযুক্তভাবে রুটটিতে প্রতিক্রিয়া জানানো উচিত।
শোলসিংগার

সম্মত হয়েছে, অনেক আধুনিক জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক যেমন ব্যাকবোন.জেএস, স্পাইন, অ্যাম্বার ইত্যাদি ব্যতীত এগুলি সমস্ত "মূলত একটি পৃষ্ঠা" জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন। এসইও-র জন্য লেখার ব্যাকএন্ড টেম্পলেট পরিবেশন করার একটি সমাধান কাজ করতে পারে তবে এর মধ্যে এটি প্রয়োজনীয় হবে।
মাওভিস লেডফোর্ড

* ঠিক আছে। আমি এ সম্পর্কে এখানে আরও বিস্তারিতভাবে লিখছি
মাউভিস লেডফোর্ড

6

HTML5 এর ইতিহাস বৈশিষ্ট করা বিচিত্র নয়।

history.pushState()কোনও popstateইভেন্ট প্রেরণ করে না বা নিজেই কোনও নতুন পৃষ্ঠা লোড করে না । এটি কেবল রাষ্ট্রকে ইতিহাসের দিকে ঠেলে দেওয়া ছিল। এটি একক পৃষ্ঠার অ্যাপ্লিকেশনগুলির জন্য একটি "পূর্বাবস্থায় ফিরিয়ে আনুন" বৈশিষ্ট্য। আপনাকে ম্যানুয়ালি কোনও popstateইভেন্ট পাঠাতে হবে বা history.go()নতুন অবস্থায় নেভিগেট করতে ব্যবহার করতে হবে। ধারণাটি হ'ল কোনও রাউটার popstateইভেন্টগুলি শুনতে এবং আপনার জন্য নেভিগেশন করতে পারে।

কিছু বিষয় লক্ষণীয়:

  • history.pushState()এবং ইভেন্ট history.replaceState()প্রেরণ করবেন না popstate
  • history.back(), history.forward()এবং ব্রাউজারের পিছনের এবং ফরোয়ার্ড বোতামগুলি popstateইভেন্টগুলি প্রেরণ করে।
  • history.go()এবং history.go(0)একটি পূর্ণ পৃষ্ঠা পুনরায় লোড করুন এবং popstateইভেন্টগুলি প্রেরণ করবেন না ।
  • history.go(-1)(1 পৃষ্ঠার পিছনে) এবং history.go(1)(1 পৃষ্ঠার সামনে) প্রেরণ popstateইভেন্টগুলি করে।

আপনি একটি নতুন রাষ্ট্র এবং একটি পপস্টেট ইভেন্ট প্রেরণে ইতিহাসের এপিআই ব্যবহার করতে পারেন।

history.pushState({message:'New State!'}, 'New Title', '/link'); window.dispatchEvent(new PopStateEvent('popstate', { bubbles: false, cancelable: false, state: history.state }));

তারপরে popstateরাউটার সহ ইভেন্টগুলি শুনুন ।


1
এটি কি কেবলমাত্র আমি, নাকি মনে new PopStateEvent(...)হচ্ছে আইই 11 এ কাজ করছে না? কেউ কি জানেন যে একটি কর্মক্ষেত্র আছে?
ডেভিড অ্যালান হেজেল

দেখে মনে হচ্ছে IE 11 এর মতো কিছু দরকার: var pop_state_event = document.createEvent('Event'); pop_state_event.initEvent('popstate', true, true); window.dispatchEvent(pop_state_event);
ডেভিড অ্যালান হেজেল

4

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


4

এখানে রেলকাস্টের রায়ান বেটস শীর্ষক একটি দুর্দান্ত স্ক্রিন-কাস্ট করা আছে। ইতিহাস.পুষ্পস্টেট পদ্ধতিটি যদি না পাওয়া যায় তবে শেষে তিনি কেবল এজাক্স কার্যকারিতা অক্ষম করে:

http://railscasts.com/episodes/246-ajax-history-state


2

আপনি এই jQuery প্লাগইনটি একবার দেখে নিতে পারেন। তাদের সাইটে তাদের প্রচুর উদাহরণ রয়েছে। http://www.asual.com/jquery/address/


আবার, জেএস বন্ধ থাকাকালীন এই সমাধানটি ব্যর্থ হয়েছে বলে মনে হচ্ছে। আমি মনে করি ইতিহাসের এপিআই-র পরিবর্তনের সাথে একত্রে কাজ করার ক্ষমতা রয়েছে যাতে জেএস স্তর থেকে পুনঃনির্দেশের প্রয়োজন ছাড়াই সার্ভারের মাধ্যমে লিঙ্কগুলি সর্বদা প্রথম প্রক্রিয়াজাত হয়।
হালকা Fuzz 15

আপনি পরিবর্তনের সাথে সঠিক পথে রয়েছেন। ইতিহাসের এপিআই পরিচালনার সমাধান এবং ব্যবহারকারীর কাছে জেএস নেই হ্যান্ডলিংয়ের সমাধান আসলে দুটি পৃথক জিনিস। আপনার কাছে জেএস না থাকলে আপনার অবশ্যই ব্যবহারকারীকে মানক হ্রেফ এবং সার্ভার প্রতিক্রিয়া সহ পরিচালনা করতে হবে। ইতিহাসের এপিআই যদি ব্যবহারকারীর ব্রাউজার সমর্থন করে তবে এটি একটি "ভালো লাগার মতো" হিসাবে তৈরি করা যেতে পারে।
নাথান টটেন

JQuery ঠিকানা 1.3 সহ যে এক্সপ্রেস এবং রাজ্য উভয় নমুনা জাহাজস্ক্রিপ্ট অক্ষম করা হয় তখন মোটামুটি ভাল কাজ করে। দ্বিতীয়টি মোড_আরাইটের সাথে পিএইচপি ব্যবহার করে।
রোস্টিস্লাভ

ঠিক আমার কৌশল। আমি জেএস ছাড়াই সাইটটি তৈরির উদ্দেশ্যে, এজাক্স উপাদানগুলি যুক্ত করতে এবং তারপরে গভীর লিঙ্কিং সংরক্ষণ করে ইউআরএল পুনর্লিখনের জন্য ইতিহাস ব্যবহার করার ইচ্ছা করি। তাত্ত্বিকভাবে, এটি যে কোনও আমি দেখেছি তার চেয়ে ভাল পদ্ধতি হওয়া উচিত কারণ সাইটটি কোনও পর্যায়ে, এজেএক্সের উপর নির্ভর করবে না
মাইল্ড ফজ

1
-1 jQuery ঠিকানা HTML5 রাজ্য API- এর সরাসরি বন্দর নয় - ডেটা বা শিরোনাম, এবং প্রতিস্থাপন সমর্থন করে না।
বালুপটন

2

আমি স্টেটরাউটার.জেএস নামে ইতিহাস.জেএস এর শীর্ষে একটি খুব সাধারণ রাউটার বিমূর্ততা লিখেছি । এটি উন্নয়নের খুব প্রাথমিক পর্যায়ে, তবে আমি এটি লিখছি এমন একটি এক পৃষ্ঠার অ্যাপ্লিকেশনটিতে রাউটিং সলিউশন হিসাবে এটি ব্যবহার করছি। আপনার মতো আমিও হিস্টরিজ.জেসকে উপলব্ধি করতে খুব শক্ত করে পেয়েছি, বিশেষত আমি জাভাস্ক্রিপ্টে বেশ নতুন হয়েছি যতক্ষণ না বুঝেছি যে এর উপরে একটি রাউটিং অ্যাবস্ট্রাকশন আপনার সত্যই প্রয়োজন (বা হওয়া উচিত), যেহেতু এটি একটি নিম্ন-স্তরের সমাধান করে সমস্যা।

এই সাধারণ উদাহরণ কোডটি এটি কীভাবে ব্যবহৃত হয়েছে তা দেখানো উচিত:

var router = new staterouter.Router();
// Configure routes
router
  .route('/', getHome)
  .route('/persons', getPersons)
  .route('/persons/:id', getPerson);
// Perform routing of the current state
router.perform();

এটির ব্যবহারটি প্রদর্শন করার জন্য আমি একটি ছোট্ট টিপুনি তৈরি করেছি।


1
এই ফ্রিল্ডটি ম্যাকের ক্রোমে আমার জন্য কাজ করছে না। এটি একটি ত্রুটি ছুড়ে ফেলে। (অব্যাহত রেফারেন্স এরিয়ার: স্টেটরাউটার সংজ্ঞায়িত করা হয়নি)
ড্রইউট

@ ড্রিউট ধন্যবাদ, গিথুব ডটকম-এ পরিবর্তনের কারণে এই ফিডলটি ভেঙে গেছে, তবে আমি এর চারপাশে কাজ করেছি।
aknuds1

হ্যাঁ, দ্রুত প্রতিক্রিয়া করার জন্য এখন কাজ করছি।
ড্র্রুটি

1

jQuery উপলভ্য থাকলে আপনি jQuery বিবিকিউ ব্যবহার করতে পারেন


এটি জেএস বন্ধ করে দিয়ে ব্যর্থ বলে মনে হচ্ছে।
হালকা Fuzz 15

এটি সম্ভবত সত্য - এটি খতিয়ে দেখেনি। আমি ভাবব যে সমস্ত জেএস-লাইব্রেরি-ভিত্তিক পদ্ধতির সাথে আপনার সেই সমস্যা থাকবে। এগুলি ইউআরএল এর হ্যাশ অংশটি পরিচালনা করার উপর ভিত্তি করে।
স্প্রুগম্যান

1
এটি এইচটিএমএল 5 হিস্ট্রি এপিআই-এর মূল বিষয় - এটি কোনও কিছু ভাঙ্গবে না
বালুপটন

2
@ মিল্ডফুজ কম্পিউটার কোনও পাওয়ার উত্স ছাড়াই ব্যর্থ বলে মনে হচ্ছে! আমি মনে করি আপনার একটি আইডি -10-টি ত্রুটি রয়েছে ...
এরিক হোডনস্কি

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