উইন্ডো.অনফফরডনলোড আইপ্যাডে কাজ করছেন না?


84

onbeforeunloadআইপ্যাডে ইভেন্টটি সমর্থিত কিনা এবং / অথবা যদি এটির ব্যবহারের আলাদা উপায় থাকে তবে কেউ কি জানেন ?

আমি বেশ কিছু চেষ্টা করেছি এবং দেখে মনে হচ্ছে onbeforeunloadইভেন্টটি আইপ্যাডে কখনই ট্রিগার হয় না (সাফারি ব্রাউজার)।

বিশেষত, আমি এটি চেষ্টা করেছি:

  • window.onbeforeunload = function(event) { event.returnValue = 'test'; }
  • window.onbeforeunload = function(event) { return 'test'; }
  • (উপরের দু'জনেই একসাথে)
  • window.onbeforeunload = function(event) { alert('test')'; }
  • (উপরের সমস্ত ফাংশন কিন্তু ভিতরে <body onbeforeunload="...">

এই সমস্তগুলি পিসিতে এফএফ এবং সাফারিটিতে কাজ করে তবে আইপ্যাডে নয়।

এছাড়াও, পৃষ্ঠাটি লোড করার ঠিক পরে আমি নিম্নলিখিতগুলি করেছি:

alert('onbeforeunload' in window);
alert(typeof window.onbeforeunload);
alert(window.onbeforeunload);

সম্মানজনকভাবে, ফলাফলগুলি:

  • true
  • object
  • null

সুতরাং, ব্রাউজারটির সম্পত্তি আছে তবে কোনও কারণে এটি বরখাস্ত হয় না।

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

কি চলছে সে সম্পর্কে কারও কি ধারণা আছে? আমি যে কোনও ইনপুট প্রশংসা করি।

ধন্যবাদ


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

আপনি ব্যবহার চেষ্টা করেছেন addEventListener()?
হ্যালো 71

4
আমি নিশ্চিত beforeunloadযে আইওএস-এ সাফারিটিতে কাজ করে না। :-( সম্ভবত আপনি যা খুঁজছেন তা নয়, তবে কীভাবে নির্ভরযোগ্যভাবে কোনও কাজের পরীক্ষাbeforeunload
পিটার ভি।

4
মার্চ 3'16 এ, window.onbeforeunload = function(event) { event.returnValue = 'test'; }আইওএস 9.2.1 এর ক্রোম এবং সাফারি উভয় ক্ষেত্রেই কাজ করে না। আমি সত্যিই পছন্দ করি onbeforeunloadকারণ আমি বাতিল ক্লিক করলে পৃষ্ঠা পরিবর্তন হয় না।
vanduc1102

4
এই ইভেন্টটি আইফোন / আইপ্যাড এবং আইওএস মোবাইল ডিভাইসে সমর্থন করা উচিত। এটি সাইটে সময় / ব্যবহারকারী বিশ্লেষণে প্রচুর পরিমাণে প্রভাব ফেলে। এটি আইওএস মোবাইল ডিভাইসগুলি বাদে সমস্ত ব্রাউজার এবং ডেস্কটপগুলিতে কাজ করে। বিক্রয়emkce.github.io/timeonsite
ওয়েবব্লভার

উত্তর:


20

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

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


হুহ, মনে হচ্ছে এটি নিশ্চিত কৌতুক (নিশ্চিত যে বার্তাটির আগে দ্বিতীয় পৃষ্ঠাটি আঘাত হ'ল) ​​কেবল মোবাইল সাফারি নয়, ফায়ারফক্সের (এবং সম্ভবত অন্যদের) ক্ষেত্রেও সত্য। তুমি আমার মনকে ফুটিয়ে তুলেছ।
অমলগোভিনাস 3'11

4
unloadঘটনা পক্ষে অবচিত pagehideদেখতে developer.apple.com/library/ios/documentation/AppleApplications/...
sol0mka

4
@ sol0mka: এটাই, মানুষ! দুর্দান্ত! আমার ক্ষেত্রে নিম্নলিখিত কোডটি কাজ করেছে, যতদূর আমি আমার সমস্ত ব্রাউজার এবং আইওএসের জন্য দেখতে পাচ্ছি: $ (উইন্ডো) .অন ('পূর্ববর্তী পৃষ্ঠা পেজহাইড', ফাংশন () {// আমার স্টাফ যা পৃষ্ঠায় করা উচিত পরিবর্তন } ); এটি আমার দৃষ্টিতে গ্রহণযোগ্য উত্তর হওয়া উচিত।
গারাভানী

18

জাভাস্ক্রিপ্টের এই বিটটি আইপ্যাড এবং আইফোনে সাফারি এবং ক্রোমের পাশাপাশি ডেস্কটপ / ল্যাপটপ / অন্যান্য ব্রাউজারগুলিতে আমার জন্য কাজ করে:

var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i);
var eventName = isOnIOS ? "pagehide" : "beforeunload";

window.addEventListener(eventName, function (event) { 
    window.event.cancelBubble = true; // Don't know if this works on iOS but it might!
    ...
} );

4
এটি ইভেন্টটি ধরতে পারে তবে আপনি কীভাবে নিশ্চিতকরণের প্রম্পটটি পপ আপ করতে পারেন? return 'test';অপ দ্বারা
এটির

ধন্যবাদ আমি আসল প্রশ্নে মিস করেছি। আমি এটি আইওএস-তে বিশেষভাবে পরীক্ষা করে দেখিনি, তবে সম্ভবত এই অতিরিক্ত লাইন যুক্ত করা কাজ করবে: window.event.cancelBبل = সত্য; আমি আমার উত্তরে যুক্ত করব
বিপদ

4
ধন্যবাদ, তবে দুঃখের সাথে এটি কার্যকর হয় না ... আমি এর ভিতরে সতর্কতা () রাখার চেষ্টা করেছি, মনে হয় নতুন পৃষ্ঠাটি সতর্কতা () চালিত হওয়ার আগেই লোড হওয়া শুরু হয়েছে। : এছাড়াও এই দেখতে stackoverflow.com/questions/3239834/...
user2335065

@ ব্যবহারকারী 2335065 আপনি কি এর কোনও সমাধান খুঁজে পেয়েছেন।
নীরজ রাঠোদ

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

6

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


56
অথবা, আপনি জানেন যে আপনার পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে সংরক্ষণ করুন যাতে আপনি দুর্ঘটনাক্রমে ভুল জিনিসটি ট্যাপ করেছেন বলে সেগুলি হারাবে না।
জোয়েল মুয়েলার

4
আমি বলিনি যে এখানে বৈধ ব্যবহার ছিল না, আমি কেবল বলেছি যে সেগুলি সবচেয়ে বেশি ব্যবহৃত হয়।
চার্লস বায়ুং

4
@JoelMueller আপনার মন্তব্য গৃহীত উত্তর :) হওয়া উচিত
সানচেজ

4
@ জোয়েলমুয়েলার এটি হ'ল আমার ব্যবহারের ক্ষেত্রে।
GRrr

@ জোয়েলমুয়েলার আপনি দয়া করে কোনও অফিসিয়াল ডকটি ভাগ করতে পারেন যেখানে আমরা এই বিবৃতিটি সম্বোধন করতে পারি যে মোবাইল সাফারি স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি সংরক্ষণ করে।
নীরজ রাঠোদ

3

একটা ব্যাপার ওয়েবকিট পরিচিত বাগ onbeforeunload সঙ্গে। আমি বিশ্বাস করি এটি ক্রোম 5 এর সর্বশেষ বিটাতে ফিক্সড, তবে আইপ্যাডের ব্রাউজারটি ওয়েবকিটের এমন একটি সংস্করণ থেকে তৈরি করা সম্ভব যা ঠিক নেই।

সম্পর্কিত ক্রোম বাগ রিপোর্ট


4
আমি বিভ্রান্ত হয়ে পড়েছি বা এই বাগ এখনও আইপ্যাড ব্রাউজারে রয়েছে?
পিটার

3

পূর্ববর্তী লোড ইভেন্টটি মোবাইল সাফারি দ্বারা সমর্থিত নয়। আপনি এখানে সমর্থিত সমস্ত ইভেন্টের তালিকা দেখতে পারেন: ইভেন্টস অ্যাপল ডকুমেন্টেশন হ্যান্ডলিং

আর পূর্বের ডাউনলোডের তালিকায় নেই!


2

https://code.google.com/p/chromium/issues/detail?id=97035

শুনুন।

পৃষ্ঠা বরখাস্ত ইভেন্টগুলির আগে সতর্কতাগুলি আর অনুমতি দেওয়া হয় না (পূর্বে পুনরায় লোড, আনলোড, পেজহাইড) no

আমি মনে করি সতর্কতা, প্রম্পট, নিশ্চিতকরণ এবং এর মতো অন্যান্য ক্রিয়াকলাপগুলিরও আর অনুমতি নেই।


2

এখানে একটি সমাধান যা সমস্ত আধুনিক ব্রাউজারে কাজ করা উচিত:

var unloaded = false;
window.addEventListener("beforeunload", function(e)
{
    if (unloaded)
        return;
    unloaded = true;
    console.log("beforeUnload");
});
window.addEventListener("visibilitychange", function(e)
{
    if (document.visibilityState == 'hidden')
    {
        if (unloaded)
            return;
        unloaded = true;
        console.log("beforeUnload");
    }
});

মোবাইল ব্রাউজারগুলি সমর্থন না করার ঝোঁক নেয় beforeunloadকারণ ব্রাউজারটি পৃষ্ঠাটি লোড না করে পটভূমিতে যেতে পারে, তারপরে যেকোন সময় অপারেটিং সিস্টেমের মাধ্যমে মারা যাবে।

বেশিরভাগ ডেস্কটপ ব্রাউজারে একটি বাগ থাকে visibilityStateযা দস্তাবেজটি লোড হওয়ার পরে কল না করার কারণ হয়। দেখুন: এখানে

অতএব, সমস্ত পরিস্থিতিতে কভার করার জন্য উভয় ইভেন্টের অন্তর্ভুক্ত করা গুরুত্বপূর্ণ।

এনবি

আমি আমার উদাহরণের console.logপরিবর্তে ব্যবহার alertকরেছি কারণ বা alertথেকে ফোন করা হলে কিছু ব্রাউজার দ্বারা অবরুদ্ধ হয়ে যাবে ।beforeunloadvisibilitychange


1

আপনার যদি কেবল পৃষ্ঠাটি ছেড়ে গেছে কিনা তা জানতে প্রয়োজন তবে আপনি ব্যবহার করতে পারেন document.unload। এটি আইওএস ব্রাউজারগুলিতে দুর্দান্ত কাজ করে। আপনি যদি অ্যাপল ডকুমেন্টেশনে দেখতে পান তবে এটি দেখতে পাবেন যে এটি অবনমিত হয়েছে এবং তারা ডকুমেন্ট.পেজহাইড ব্যবহার করার পরামর্শ দেয়


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