পৃষ্ঠাটি জাভাস্ক্রিপ্টে পুনরায় লোড হয়েছে বা রিফ্রেশ হয়েছে কিনা তা পরীক্ষা করুন


184

কেউ যখন কোনও পৃষ্ঠা পুনরায় রিফ্রেশ করার চেষ্টা করে আমি তা দেখতে চাই।

উদাহরণস্বরূপ, আমি যখন কোনও পৃষ্ঠা খুলি তখন কিছুই ঘটে না তবে আমি পৃষ্ঠাটি রিফ্রেশ করার সময় এটি একটি সতর্কতা প্রদর্শন করা উচিত।


1
সার্ভার সাইড কোড ছাড়া সত্যই সম্ভব নয়। আপনি এটা কি জন্য প্রয়োজন? আপনি যদি বড় ছবি দেন তবে আমরা আরও ভাল বিকল্প প্রস্তাব করতে পারি।
শ্যাডো উইজার্ড আপনার পক্ষে

হতে পারে আপনি কোনও কুকির সাথে জিনিস যেমন করতে পারেন ... যেমন সময় সংরক্ষণ এবং পুনরায় লোড সময় পার্থক্য তুলনা।
ফেলিক্স ক্লিং

আমি ফেসবুকের লিঙ্কটি তৈরি করতে চাই # লিঙ্কটি হবে #! / যাইহোক আমি # টি মুছে ফেলতে চাই! যখন পৃষ্ঠাটি কেবল পুনরায় লোড করুন
আহমেদ

1
@ আহমাদ আমিও একই কাজ করার চেষ্টা করছি। নীচের কোনও সমাধান কি আপনার পক্ষে কাজ করেছে?
পল ফিৎসগেরাল্ড

3
আমার অবহেলা window.performance.navigation.typeকরা হয়েছে, আমার উত্তর দেখুন
Илья Зеленько

উত্তর:


219

Dep হ্রাস window.performance.navigation.typeকরা হয়েছে, দয়া করে Илья answer এর উত্তর দেখুন


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

এটি নেভিগেশন টাইমিং এপিআই ব্যবহার করে ।

//check for Navigation Timing API support
if (window.performance) {
  console.info("window.performance works fine on this browser");
}
  if (performance.navigation.type == 1) {
    console.info( "This page is reloaded" );
  } else {
    console.info( "This page is not reloaded");
  }

উত্স: https://developer.mozilla.org/en-US/docs/Web/API/ নেভিগেশন_টিমিং_এপিআই


1
ধন্যবাদ বন্ধু, পৃষ্ঠাটি ব্রাউজার থেকে ডান ক্লিক / রিফ্রেশ থেকে পুনরায় লোড করা হয়েছে বা ইউআরএল দ্বারা পুনরায় লোড করা হয়েছে এটি সনাক্ত করার সঠিক সমাধান is
রোক মেজোস

4
সচেতন হন। ক্রোম সম্প্রতি এই আচরণটি পরিবর্তন করেছিল। যখন ব্যবহারকারী বর্তমান ঠিকানা বারে ক্লিক করুন এবং এন্টার টিপুন, পারফরম্যান্স.ন্যাভিগেশন.টাইপটির মান 1 হবে যা 0 হওয়া উচিত I আমি সংস্করণ ৫ in-তে পরীক্ষা করেছি why কেন তা নিশ্চিত নয়।
জ্যাকউইন

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

26
performance.navigation.type == performance.navigation.TYPE_RELOADপরিবর্তে পড়া সহজ == 1। এছাড়াও, আপনি যদি পরীক্ষা করেন তবে দেখতে performance.navigationপাবেন যে এখানে 4 টি পৃথক নেভিগেশন প্রকার রয়েছে TYPE_BACK_FORWARD,TYPE_NAVIGATE
ভিটালিজ করনিজেনকো

5
আমার অবহেলা window.performance.navigation.typeকরা হয়েছে, আমার উত্তর দেখুন
Зеленько

37

প্রথম পদক্ষেপটি sessionStorageকিছু প্রাক-সংজ্ঞায়িত মান এবং এটিতে সতর্কতা ব্যবহারকারী উপস্থিত থাকলে তা পরীক্ষা করা হয়:

if (sessionStorage.getItem("is_reloaded")) alert('Reloaded!');

দ্বিতীয় পদক্ষেপটি sessionStorageকিছু মান সেট করা হয় (উদাহরণস্বরূপ true):

sessionStorage.setItem("is_reloaded", true);

পৃষ্ঠাগুলি বন্ধ না হওয়া পর্যন্ত সেশন মানগুলি রাখা হয়েছে সুতরাং এটি সাইটের সাথে নতুন পৃষ্ঠায় পৃষ্ঠাটি পুনরায় লোড করা হলেই তা কাজ করবে। আপনি পুনরায় লোড গণনা একইভাবে রাখতে পারেন।


28
দুটি বিষয় সম্পর্কে সচেতন হতে হবে: 1)। আপনি কেবল সেশন এবং স্থানীয় স্টোরেজে স্ট্রিংয়ের মান সংরক্ষণ করতে পারেন। সুতরাং trueরূপান্তরিত হয় "true"। 2)। ব্যবহারকারী ব্রাউজার উইন্ডোটি বন্ধ না করা পর্যন্ত সেশন স্টোরেজ অব্যাহত থাকে, সুতরাং আপনি একই ব্রাউজার সেশনের মধ্যে পৃষ্ঠা পুনরায় লোড এবং আপনার সাইটে দূরে এবং ফিরে নেভিগেটের মধ্যে পার্থক্য বলতে পারবেন না।
হেক্টর

35

নতুন মান 2018-এখন (পারফরম্যান্স নেভিগেশন সময় নির্ধারণ)

window.performance.navigationনেভিগেশন সময় স্তর স্তর 2 স্পেসিফিকেশনে সম্পত্তি হ্রাস করা হয় । ব্যবহার করুন পরিবর্তে ইন্টারফেস।PerformanceNavigationTiming

PerformanceNavigationTiming.type

এটি একটি পরীক্ষামূলক প্রযুক্তি

উত্পাদনে এটি ব্যবহার করার আগে ব্রাউজারের সামঞ্জস্যতা টেবিলটি সাবধানতার সাথে পরীক্ষা করুন ।

2019-07-08 এ সমর্থন

কেবল পঠনযোগ্য প্রপার্টি নেভিগেশনের ধরণের প্রতিনিধিত্ব করে একটি স্ট্রিং প্রদান করে। মানটি নিম্নলিখিতগুলির মধ্যে একটি হতে হবে:

  • নেভিগেট - নেভিগেশন একটি লিঙ্ক ক্লিক করে, ব্রাউজারের ঠিকানা বারে URL প্রবেশ করানো, ফর্ম জমা দেওয়া, বা নীচে উল্লিখিত হিসাবে পুনরায় লোড এবং ব্যাক_ফোর্ড ব্যতীত অন্য কোনও স্ক্রিপ্ট ক্রিয়াকলাপ শুরু করে নেভিগেশন শুরু হয়েছিল।

  • পুনরায় লোড - নেভিগেশন ব্রাউজারের পুনরায় লোড অপারেশন বা এর মাধ্যমে location.reload()

  • back_forward - নেভিগেশন ব্রাউজারের ইতিহাস ট্র্যাভারসাল অপারেশনের মাধ্যমে।

  • প্রেরেন্ডার - নেভিগেশন একটি প্রেরেন্ডার ইঙ্গিত দিয়ে শুরু করা হয় ।

এই সম্পত্তিটি কেবল পঠনযোগ্য।

নিম্নলিখিত উদাহরণটি এই সম্পত্তিটির ব্যবহারের চিত্রণ করে।

function print_nav_timing_data() {
  // Use getEntriesByType() to just get the "navigation" events
  var perfEntries = performance.getEntriesByType("navigation");

  for (var i=0; i < perfEntries.length; i++) {
    console.log("= Navigation entry[" + i + "]");
    var p = perfEntries[i];
    // dom Properties
    console.log("DOM content loaded = " + (p.domContentLoadedEventEnd - p.domContentLoadedEventStart));
    console.log("DOM complete = " + p.domComplete);
    console.log("DOM interactive = " + p.interactive);

    // document load and unload time
    console.log("document load = " + (p.loadEventEnd - p.loadEventStart));
    console.log("document unload = " + (p.unloadEventEnd - p.unloadEventStart));

    // other properties
    console.log("type = " + p.type);
    console.log("redirectCount = " + p.redirectCount);
  }
}

3
অবহেলিত এপিআই দেখানোর জন্য +1, তবে আইওএস-এ তাদের সমর্থন না পাওয়ার জন্য অ্যাপলকে
-১০

14

কেউ যখন প্রথম পৃষ্ঠাটি দেখেন তখন একটি কুকি সঞ্চয় করুন। রিফ্রেশ করার সময় আপনার কুকি বিদ্যমান কিনা তা সতর্কতা অবলম্বন করুন।

function checkFirstVisit() {
  if(document.cookie.indexOf('mycookie')==-1) {
    // cookie doesn't exist, create it now
    document.cookie = 'mycookie=1';
  }
  else {
    // not first visit, so alert
    alert('You refreshed!');
  }
}

এবং আপনার বডি ট্যাগে:

<body onload="checkFirstVisit()">

9
প্রত্যাবর্তনকারীদের কী হবে?
রেড তাজ

5
@ রব 2211 এর মতো পৃষ্ঠাটি দেখার জন্য কেবল এটি পরীক্ষা করে এবং কুকি এখনও জীবিত থাকাকালীন পৃষ্ঠাটি পুনর্বিবেচনা করা হয় যতক্ষণ না এটি মিথ্যা ধনাত্মক দিতে পারে। রিফ্রেশ পরীক্ষা করার জন্য এটি ব্যবহার করবেন না।
ব্রানন

@ ব্রানন - কুকি কোনও মেয়াদোত্তীর্ণ মান ব্যতীত তৈরি এবং ব্রাউজারটি বন্ধ হয়ে গেলে তা ধ্বংস হয়ে যায়।
টেকফুবার

1
পছন্দ করুন কুকিটি ধ্বংস হওয়ার আগে যদি ব্যবহারকারী সাইটটি পুনরায় দেখা করেন তবে এটি কি এখনও সমস্যা তৈরি করবে না?
ব্র্যানন

3
@ ব্রানন - হ্যাঁ, যদি ব্রাউজারটি খোলা রেখে দেওয়া হয় এবং কিছুক্ষণ পরে ব্যবহারকারী পুনরায় দেখা করেন, এটি নতুন দর্শন হিসাবে বিবেচিত হবে না।
টেকফুবার

7

যদি

event.currentTarget.performance.navigation.type

আয়

0 => ব্যবহারকারী সবেমাত্র একটি url
1 => পৃষ্ঠাতে টাইপ করেছেন
2 => ব্যাক বোতাম ক্লিক করে re


আমি এই ত্রুটি পেয়েছি, আপনি কি আরও ব্যাখ্যা করতে পারেন? আনকড টাইপ এরিয়ার: অপরিজ্ঞাতকৃত সম্পত্তি 'কারেন্ট ট্রেজার্ট' পড়তে পারছি না
জানাতবেক শার্শেভ

2 => TYPE_BACK_FORWARD ইতিহাসটিতে নেভিগেট করে পৃষ্ঠাটি অ্যাক্সেস করা হয়েছিল। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

performance.navigation.typeঅনুগ্রহ করে, আমার উত্তর দেখুন
Илья Зеленько

6

আমি এখানে কিছু তথ্য পেয়েছি জাভাস্ক্রিপ্ট সনাক্তকরণ পৃষ্ঠা রিফ্রেশ সনাক্ত করেছি । তার প্রথম সুপারিশটি লুকানো ক্ষেত্রগুলি ব্যবহার করছে যা পৃষ্ঠা রিফ্রেশের মাধ্যমে সঞ্চিত থাকে।

function checkRefresh() {
    if (document.refreshForm.visited.value == "") {
        // This is a fresh page load
        document.refreshForm.visited.value = "1";
        // You may want to add code here special for
        // fresh page loads
    } else {
        // This is a page refresh
        // Insert code here representing what to do on
        // a refresh
    }
}
<html>

<body onLoad="JavaScript:checkRefresh();">
    <form name="refreshForm">
        <input type="hidden" name="visited" value="" />
    </form>

</body>

</html>


আমরা Refererসম্পত্তিটি যাচাই করেও এই সম্পত্তিটির ভিত্তিতে সার্ভারের প্রতিক্রিয়াটি সংশোধন করতে পারি
অ্যাডেল

পার্শ্ব দ্রষ্টব্য: এই পৃষ্ঠায় তালিকাভুক্ত প্রথম পদ্ধতিটি ব্যর্থ হবে কারণ কোডটি ডিওএম পার্স করার আগে কার্যকর করা হচ্ছে। <script>উপাদানটিকে নীচে সরানো কাজ করবে - তবে এটি এখনও কোনও গ্যারান্টিযুক্ত সমাধান নয় (এবং উভয়ই কুকির পদ্ধতি নয়)।
অ্যান্ডি ই

1
@ অ্যাডিল: চেক Refererকরা নির্ভরযোগ্য নয়; অনেকগুলি প্রক্সি এবং ব্রাউজারের এক্সটেনশানগুলি এটি অনুরোধ থেকে সরিয়ে দেয়।
অ্যান্ডি ই

@ ভোরনোইপোটাতো কেবল একটি লিঙ্ক পোস্টের পরিবর্তে তথ্য সংক্ষিপ্ত করার চেষ্টা করুন।
ডালিন

1
আমার জন্য, এটি সর্বদা "যদি" শর্তটি কার্যকর করে এবং কখনই "অন্য" অংশটি কার্যকর করে না, আমি পৃষ্ঠা লোড করেছি বা পৃষ্ঠা রিফ্রেশ করেছি তা বিবেচনা করে না।
পার্থ ভোরা

6

আমি একই সাথে পুরানো window.performance.navigationএবং নতুন উভয় পদ্ধতি ব্যবহার করে পরীক্ষা করতে এই ফাংশনটি লিখেছি performance.getEntriesByType("navigation"):

function navigationType(){

    var result;
    var p;

    if (window.performance.navigation) {
        result=window.performance.navigation;
        if (result==255){result=4} // 4 is my invention!
    }

    if (window.performance.getEntriesByType("navigation")){
       p=window.performance.getEntriesByType("navigation")[0].type;

       if (p=='navigate'){result=0}
       if (p=='reload'){result=1}
       if (p=='back_forward'){result=2}
       if (p=='prerender'){result=3} //3 is my invention!
    }
    return result;
}

ফলাফল বর্ণনা:

0: একটি লিঙ্কে ক্লিক করা, ব্রাউজারের ঠিকানা বারে ইউআরএল প্রবেশ করা, ফর্ম জমা দেওয়া, স্ক্রিপ্ট ক্রিয়াকলাপের মাধ্যমে সূচনা করে বুকমার্ক ক্লিক করা।

1: পুনরায়লোড বোতামটি ক্লিক করে বা ব্যবহার করেLocation.reload()

2: ব্রাউজার ইতিহাসের সাথে কাজ করা (বাক্স এবং ফরোয়ার্ড)।

3: পূর্বনির্ধারিত কার্যকলাপ পছন্দ<link rel="prerender" href="https://stackoverflow.com//example.com/next-page.html">

4: অন্য কোন পদ্ধতি।


1

আমি এখানে জাভাস্ক্রিপ্ট সনাক্তকরণ পৃষ্ঠা রিফ্রেশ সনাক্ত করেছি

function UnLoadWindow() {
    return 'We strongly recommends NOT closing this window yet.'
}

window.onbeforeunload = UnLoadWindow;

3
যেখানে এখানে" ? আপনি কি লিঙ্কটি ভুলে গেছেন?
ᴄʀᴏᴢᴇᴛ

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