জেএস-এ ইউআরএল অ্যাঙ্কর পরিবর্তন ইভেন্ট পরিচালনা করুন


90

আমি কীভাবে জাভাস্ক্রিপ্ট কলব্যাক কোড লিখতে পারি যা ইউআরএল অ্যাঙ্কারের কোনও পরিবর্তনে কার্যকর করা হবে?

থেকে উদাহরণস্বরূপ http://example.com#aকরারhttp://example.com#b

উত্তর:


128

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

নীচের মতো কিছু একই অর্জন করে:

var storedHash = window.location.hash;
window.setInterval(function () {
    if (window.location.hash != storedHash) {
        storedHash = window.location.hash;
        hashChanged(storedHash);
    }
}, 100); // Google uses 100ms intervals I think, might be lower

গুগল ক্রোম 5, সাফারি 5, অপেরা 10.60 , ফায়ারফক্স 3.6 এবং ইন্টারনেট এক্সপ্লোরার 8 সকলেইhashchange ইভেন্টটিকে সমর্থন করে :

if ("onhashchange" in window) // does the browser support the hashchange event?
    window.onhashchange = function () {
        hashChanged(window.location.hash);
    }

এবং এটি একত্র করা:

if ("onhashchange" in window) { // event supported?
    window.onhashchange = function () {
        hashChanged(window.location.hash);
    }
}
else { // event not supported:
    var storedHash = window.location.hash;
    window.setInterval(function () {
        if (window.location.hash != storedHash) {
            storedHash = window.location.hash;
            hashChanged(storedHash);
        }
    }, 100);
}

- jQuery এর যে hashchange ইভেন্টের জন্য চেক করুন এবং যদি প্রয়োজন হয় তাহলে নিজস্ব প্রদান করবে একটি প্লাগইন আছে http://benalman.com/projects/jquery-hashchange-plugin/

সম্পাদনা : আপডেট হওয়া ব্রাউজার সমর্থন (আবার)।


সম্পূর্ণতার var storedHash = window.location.hash;জন্য, পুটিং-এটি-একসাথে সারাংশ ব্লকে যুক্ত করুন। বিটিডব্লিউ: আজকাল এটিকে পলিফিল বলে আমার মনে হয়।
ফ্র্যাঙ্ক নোক্কে

4
আজকাল আপনি শুনতে পারেন hashChangeউপর window stackoverflow.com/questions/6390341/how-to-detect-url-change
টিমো Huovinen

@ অ্যান্ডি আমি উত্তরটি পড়েছি, আমি ছোট নোটটি মিস করেছি, এবং আমি এমন ঘটনা দেখিনি যাhashChanged(storedHash);
টিমো হুভিনেন

4
@ টিমো হুভোইনেন: hashChangedএই ক্ষেত্রে, এই কোডটি ব্যবহার করে কোনও বিকাশকারী দ্বারা প্রয়োগ করা একটি ফাংশন হ'ল। এখানে উত্তরটি কেবল দেখায় যে onhashchangeইভেন্টটি উপলভ্য নয় এমন পরিবর্তনের জন্য কীভাবে কেউ হ্যাশ পর্যবেক্ষণ করতে পারে এবং সর্বজনীন সমাধান সরবরাহের জন্য ইভেন্ট-ভিত্তিক এবং টাইমার-ভিত্তিক পদ্ধতির সমন্বয় করে। আমার বক্তব্যটি আপনি যে উত্তরটির সাথে সংযুক্ত করেছেন তা এখানে উত্তরের সাথে একেবারে কিছুই যোগ করে না ;-)। তারা একই বেসিক তথ্য সরবরাহ করে, এমনকি বেন আলমানের jQuery প্লাগইনে লিঙ্ক। পার্থক্যটি হ'ল আমি আমার উত্তরে একটি খাঁটি জেএস সমাধান সরবরাহ করেছি।
অ্যান্ডি ই

4
আমি কিছু লাইটওয়েট জেএস রাউটার খুঁজছিলাম, তবে এটি কাজটি দুর্দান্তভাবে করেছে did সমস্ত নির্ভরতাও বাদ দিয়েছে :)
gskema

5

আমি addEventListenerওভাররাইটিংয়ের পরিবর্তে ব্যবহারের পরামর্শ দেব window.onhashchange, অন্যথায় আপনি অন্য প্লাগইনগুলির জন্য ইভেন্টটি ব্লক করবেন।

window.addEventListener('hashchange', function() {
...
})

আজ বিশ্বব্যাপী ব্রাউজার ব্যবহারের দিকে তাকিয়ে, একটি ফলব্যাক আর প্রয়োজন হয় না।


3

অন্যান্য এসও প্রশ্নের মধ্যে আমি যা দেখছি, কেবলমাত্র কার্যক্ষম ক্রস ব্রাউজার সমাধানটি টাইমার। উদাহরণস্বরূপ এই প্রশ্নটি দেখুন ।



2

(কেবলমাত্র রেকর্ডের জন্য।) YUI3 "হ্যাশচেঞ্জ" সিন্থেটিক ইভেন্টটি কমবেশি গৃহীত উত্তর হিসাবে একই জিনিস করে

YUI().use('history-hash', function (Y) {
  Y.on('hashchange', function (e) {
    // Handle hashchange events on the current window.
  }, Y.config.win);
});

0

আপনি এ থেকে আরও তথ্য পেতে পারেন

মিউটেশন ইভেন্টের ধরণ

মিউটেশন ইভেন্ট মডিউলটি অ্যাট্রি এবং পাঠ্য পরিবর্তনগুলি সহ নথির কাঠামোর কোনও পরিবর্তনের বিজ্ঞপ্তির মঞ্জুরি দেওয়ার জন্য ডিজাইন করা হয়েছে।


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