কীভাবে ইন্টারনেট সংযোগটি জাভাস্ক্রিপ্টে অফলাইন রয়েছে তা সনাক্ত করবেন?
কীভাবে ইন্টারনেট সংযোগটি জাভাস্ক্রিপ্টে অফলাইন রয়েছে তা সনাক্ত করবেন?
উত্তর:
ব্যর্থ XHR অনুরোধ করে সংযোগটি হারিয়ে গেছে তা আপনি নির্ধারণ করতে পারেন ।
মানক পদ্ধতির অনুরোধটি হল কয়েকবার অনুরোধটি আবার চেষ্টা করা । যদি এটি অতিক্রম না করে তবে ব্যবহারকারীকে সংযোগটি পরীক্ষা করতে সতর্ক করুন , এবং নিখুঁতভাবে ব্যর্থ হন ।
সিডিনোট: পুরো অ্যাপ্লিকেশনটিকে "অফলাইন" অবস্থায় রাখার ফলে হ্যান্ডলিং রাষ্ট্রের প্রচুর ত্রুটি-প্রবণ কাজ হতে পারে .. ওয়্যারলেস সংযোগ আসতে পারে এবং যেতে পারে ইত্যাদি। তাই আপনার সেরা বাজি হতে পারে কেবল নিখুঁতভাবে ব্যর্থ হওয়া, সংরক্ষণ করা ডেটা এবং ব্যবহারকারীকে সতর্ক করুন .. তাদের যদি কোনও থাকে তবে শেষ পর্যন্ত সংযোগের সমস্যাটি ঠিক করার অনুমতি দেয় এবং আপনার অ্যাপ্লিকেশনটি যথেষ্ট পরিমাণ ক্ষমার সাথে ব্যবহার করা চালিয়ে যায়।
সিডিনোট: আপনি সংযোগের জন্য গুগলের মতো একটি নির্ভরযোগ্য সাইট চেক করতে পারেন, তবে এটি কেবল আপনার নিজের অনুরোধ করার চেষ্টা করার মতো পুরোপুরি কার্যকর নাও হতে পারে, কারণ গুগল উপলব্ধ থাকতে পারে, আপনার নিজের অ্যাপ্লিকেশনটি নাও থাকতে পারে এবং আপনি এখনও যাচ্ছেন আপনার নিজের সংযোগ সমস্যাটি পরিচালনা করতে হবে। গুগলে পিং পাঠানোর চেষ্টা করা আপনার ইন্টারনেট সংযোগ নিজেই নিচে রয়েছে তা নিশ্চিত করার একটি ভাল উপায় হতে পারে, সুতরাং যদি সেই তথ্যটি আপনার পক্ষে কার্যকর হয়, তবে এটি সমস্যার জন্য উপযুক্ত হতে পারে।
সিডিনোট : একটি পিং পাঠানো একইভাবে অর্জন করা যেতে পারে যে আপনি যে কোনও ধরণের দ্বিমুখী এজাক্স অনুরোধ করবেন তবে গুগলে একটি পিং পাঠানো এই ক্ষেত্রে কিছু চ্যালেঞ্জ তৈরি করতে পারে। প্রথমত, আমাদের কাছে একই ক্রস-ডোমেন সমস্যাগুলি রয়েছে যা সাধারণত অ্যাজাক্স যোগাযোগ তৈরির ক্ষেত্রে সম্মুখীন হয়। একটি বিকল্প হ'ল একটি সার্ভার-সাইড প্রক্সি সেটআপ করা, যার মধ্যে আমরা আসলে ping
গুগল (বা যে কোনও সাইট) করি এবং পিংয়ের ফলাফলগুলি অ্যাপ্লিকেশনটিতে ফিরিয়ে আনি। এটি একটি ক্যাচ -22কারণ যদি ইন্টারনেট সংযোগটি আসলে সমস্যা হয় তবে আমরা সার্ভারে উঠতে পারব না, এবং যদি সংযোগ সমস্যাটি কেবল আমাদের নিজস্ব ডোমেনে থাকে তবে আমরা পার্থক্যটি বলতে পারব না। অন্যান্য ক্রস-ডোমেন কৌশলগুলি চেষ্টা করা যেতে পারে, উদাহরণস্বরূপ, আপনার পৃষ্ঠায় একটি আইফ্রেমে এম্বেড করা যা google.com এ নির্দেশ করে এবং তারপরে সাফল্য / ব্যর্থতার জন্য আইফ্রেমে ভোটদান (বিষয়বস্তু পরীক্ষা করা ইত্যাদি)। কোনও চিত্র এম্বেড করা সত্যিই আমাদের কিছু না বলবে, কারণ কী হচ্ছে তা সম্পর্কে ভাল সিদ্ধান্তে পৌঁছানোর জন্য আমাদের যোগাযোগ ব্যবস্থা থেকে একটি কার্যকর প্রতিক্রিয়া দরকার need সুতরাং আবারও, সামগ্রিকভাবে ইন্টারনেট সংযোগের স্থিতি নির্ধারণ করা এর পক্ষে মূল্য হিসাবে বেশি সমস্যা হতে পারে। আপনার নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য আপনাকে এই বিকল্পগুলি ওজন করতে হবে।
IE 8 উইন্ডো.নভিগেটর.অনলাইন সম্পত্তি সমর্থন করবে ।
তবে অবশ্যই এটি অন্যান্য ব্রাউজার বা অপারেটিং সিস্টেমের সাথে সহায়তা করে না। আমি পূর্বাভাস দিয়েছি যে অন্যান্য ব্রাউজার বিক্রেতারা অ্যাজাক্স অ্যাপ্লিকেশনগুলিতে অনলাইন / অফলাইন স্থিতি জানার গুরুত্বের সাথে সেই সম্পত্তি সরবরাহ করার সিদ্ধান্ত নেবেন।
এটি না হওয়া পর্যন্ত এক্সএইচআর বা একটি Image()
বা <img>
অনুরোধ আপনার কার্যকারিতাটির কাছাকাছি কিছু সরবরাহ করতে পারে।
আপডেট (2014/11/16)
প্রধান ব্রাউজারগুলি এখন এই সম্পত্তিটিকে সমর্থন করে তবে আপনার ফলাফলগুলি পৃথক হবে।
মজিলা ডকুমেন্টেশন থেকে উদ্ধৃতি :
ক্রোম এবং সাফারিতে, ব্রাউজার যদি কোনও স্থানীয় অঞ্চল নেটওয়ার্ক (ল্যান) বা রাউটারের সাথে সংযোগ রাখতে সক্ষম না হয় তবে এটি অফলাইন হয়; অন্য সমস্ত শর্ত ফিরে
true
। আপনি যখন ধরে নিতে পারেন যে ব্রাউজারটি যখন এটি দেয় তখন অফলাইন থাকেfalse
মান , তবে আপনি ধরে নিতে পারবেন না যে সত্যিকার মানটির অর্থ ব্রাউজারটি ইন্টারনেট অ্যাক্সেস করতে পারে। আপনি মিথ্যা ধনাত্মকতা পেতে পারেন, যেমন কম্পিউটারগুলি এমন ক্ষেত্রে যেখানে ভার্চুয়ালাইজেশন সফ্টওয়্যারটি চলছে যেখানে ভার্চুয়াল ইথারনেট অ্যাডাপ্টারগুলি সর্বদা "সংযুক্ত" থাকে। অতএব, আপনি যদি সত্যিই ব্রাউজারের অনলাইন অবস্থান নির্ধারণ করতে চান তবে আপনার চেক করার জন্য অতিরিক্ত উপায় বিকাশ করা উচিত।ফায়ারফক্স এবং ইন্টারনেট এক্সপ্লোরারে ব্রাউজারটিকে অফলাইন মোডে স্যুইচ করা একটি
false
মান প্রেরণ করে । অন্যান্য সমস্ত শর্তাবলী একটিtrue
মান ফেরত দেয় ।
প্রায় সমস্ত বড় ব্রাউজার এখন window.navigator.onLine
সম্পত্তি, এবং সম্পর্কিত online
এবং offline
উইন্ডো ইভেন্টগুলি সমর্থন করে :
window.addEventListener('online', () => console.log('came online'));
window.addEventListener('offline', () => console.log('came offline'));
আপনার সিস্টেম বা ব্রাউজারটিকে অফলাইন / অনলাইন মোডে সেট করার চেষ্টা করুন এবং window.navigator.onLine
মান পরিবর্তনের জন্য কনসোল বা সম্পত্তিটি পরীক্ষা করুন । আপনি এই ওয়েবসাইটে এটি পরীক্ষা করতে পারেন ।
মজিলা ডকুমেন্টেশন থেকে এই উদ্ধৃতি নোট করুন :
ক্রোম এবং সাফারিতে, ব্রাউজার যদি কোনও স্থানীয় অঞ্চল নেটওয়ার্ক (ল্যান) বা রাউটারের সাথে সংযোগ রাখতে সক্ষম না হয় তবে এটি অফলাইন হয়; অন্য সমস্ত শর্ত ফিরে
true
। সুতরাং যখন আপনি অনুমান করতে পারেন যে ব্রাউজার অফলাইনে থাকা অবস্থায় যখন এটি একটি ফেরৎfalse
মান , আপনি অনুমান করতে পারে না যে একটিtrue
মান অগত্যা মানে ব্রাউজার ইন্টারনেট অ্যাক্সেস করতে পারে । আপনি মিথ্যা ধনাত্মকতা পেতে পারেন, যেমন কম্পিউটারগুলি এমন ক্ষেত্রে যেখানে ভার্চুয়ালাইজেশন সফ্টওয়্যারটি চলছে যেখানে ভার্চুয়াল ইথারনেট অ্যাডাপ্টারগুলি সর্বদা "সংযুক্ত" থাকে। অতএব, আপনি যদি সত্যিই ব্রাউজারের অনলাইন অবস্থান নির্ধারণ করতে চান তবে আপনার চেক করার জন্য অতিরিক্ত উপায় বিকাশ করা উচিত।ফায়ারফক্স এবং ইন্টারনেট এক্সপ্লোরারে ব্রাউজারটিকে অফলাইন মোডে স্যুইচ করা একটি
false
মান প্রেরণ করে । ফায়ারফক্স ৪১ অবধি, সমস্ত অন্যান্য শর্তাবলীতে একটিtrue
মান ফিরে আসে ; ফায়ারফক্স ৪১, ওএস এক্স এবং উইন্ডোজ থেকে, মানটি আসল নেটওয়ার্ক সংযোগ অনুসরণ করবে।
(জোর আমার নিজের)
এর অর্থ হ'ল যদি window.navigator.onLine
হয় false
(বা আপনি কোনও offline
ইভেন্ট পান) তবে আপনার কোনও ইন্টারনেট সংযোগ না থাকার গ্যারান্টি রয়েছে।
যদি এটি হয় true
তবে (বা আপনি কোনও online
ইভেন্ট পান) তবে এর অর্থ কেবল সিস্টেমটি কোনও কোনও নেটওয়ার্কের সাথে সংযুক্ত থাকে at এর অর্থ এই নয় যে উদাহরণস্বরূপ আপনার কাছে ইন্টারনেট অ্যাক্সেস রয়েছে। এটি যাচাই করতে, আপনাকে এখনও অন্য উত্তরে বর্ণিত সমাধানগুলির একটি ব্যবহার করতে হবে।
আমি প্রাথমিকভাবে এটিকে গ্রান্ট ওয়াগনারের উত্তরের আপডেট হিসাবে পোস্ট করার ইচ্ছা করেছিলাম তবে এটি সম্পাদনার খুব বেশি মনে হয়েছিল, বিশেষত বিবেচনা করে যে ২০১৪ আপডেটটি ইতিমধ্যে তাঁর কাছ থেকে আসে নি ।
এটি করার বিভিন্ন উপায় রয়েছে:
আপনি একটি onerror
মধ্যে একটি রাখতে পারে img
, মত
<img src='http://www.example.com/singlepixel.gif'
onerror='alert("Connection dead");' />
উত্স চিত্রটি সরানো / পুনরায় নামকরণ করা হলে এই পদ্ধতিটিও ব্যর্থ হতে পারে এবং সাধারণত এজ্যাক্স বিকল্পের নিকৃষ্ট পছন্দ হতে পারে।
সুতরাং এটি চেষ্টা ও সনাক্ত করার বিভিন্ন উপায় রয়েছে, কোনওটিই নিখুঁত নয়, তবে ব্রাউজারের স্যান্ডবক্স থেকে ঝাঁপিয়ে পড়ে সরাসরি ব্যবহারকারীর নেট সংযোগের স্থিতি অ্যাক্সেস করার দক্ষতার অভাবে, তারা সেরা বিকল্প বলে মনে হয়।
if(navigator.onLine){
alert('online');
} else {
alert('offline');
}
আপনি aj .axax () এর error
কলব্যাক ব্যবহার করতে পারেন , যদি অনুরোধ ব্যর্থ হয় তবে আগুন লাগবে। তাহলে textStatus
STRING "সময়সীমার" সমান এটা সম্ভবত এর মানে হল সংযোগ নষ্ট হয়ে গেছে:
function (XMLHttpRequest, textStatus, errorThrown) {
// typically only one of textStatus or errorThrown
// will have info
this; // the options for this ajax request
}
ডক থেকে :
ত্রুটি : অনুরোধ ব্যর্থ হলে কল করতে একটি ফাংশন। ফাংশনটি তিনটি আর্গুমেন্ট পাস করেছে: এক্সএমএলএইচটিপিআরকোয়েস্ট অবজেক্ট, একটি স্ট্রিং যা ঘটেছে ত্রুটির ধরণের বর্ণনা দেয় এবং একটি ঘটলে ifচ্ছিক ব্যতিক্রম বস্তু বর্ণনা করে। দ্বিতীয় আর্গুমেন্টের জন্য সম্ভাব্য মানগুলি (নাল ছাড়াও) হ'ল "টাইমআউট", "ত্রুটি", "নোটডিমাইটিড" এবং "পার্সেরেরর"। এটি একটি আজাক্স ইভেন্ট
উদাহরণস্বরূপ:
$.ajax({
type: "GET",
url: "keepalive.php",
success: function(msg){
alert("Connection active!")
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
if(textStatus == 'timeout') {
alert('Connection seems dead!');
}
}
});
হিসাবে olliej বললেন, ব্যবহার navigator.onLine
ব্রাউজার সম্পত্তি সঙ্গে সেই অনুযায়ী নেটওয়ার্কের অনুরোধ পাঠানো এবং চেয়ে বাঞ্ছনীয় developer.mozilla.org/En/Online_and_offline_events , এটা এমনকি Firefox এবং আইই পুরানো সংস্করণ সমর্থন করে।
সাম্প্রতিককালে, WHATWG আপনার প্রতিক্রিয়া জানাতে প্রয়োজন হলে ইভেন্টগুলি online
এবং offline
ইভেন্টগুলির সংযোজন নির্দিষ্ট করে দিয়েছেnavigator.onLine
পরিবর্তনগুলির ।
দয়া করে ড্যানিয়েল সিলভিরা পোস্ট করেছেন এমন লিঙ্কের দিকেও মনোযোগ দিন যা উল্লেখ করে যে সার্ভারের সাথে সিঙ্ক করার জন্য সেই সংকেত / সম্পত্তির উপর নির্ভর করা সবসময় ভাল ধারণা নয়।
window.navigator.onLine
আপনি যা সন্ধান করছেন তা কিন্তু এখানে কয়েকটি জিনিস যুক্ত করতে হবে, প্রথমে এটি যদি আপনার অ্যাপ্লিকেশনটিতে এমন কিছু থাকে যা আপনি যাচাই করতে চান (ব্যবহারকারী হঠাৎ অফলাইনে চলে যায় কিনা তা দেখতে পছন্দ করুন, যা বেশিরভাগ সময় এই ক্ষেত্রে সঠিক হয়, তবে আপনি পরিবর্তনটিও শুনতে হবে), এর জন্য আপনি কোনও পরিবর্তন সনাক্ত করতে উইন্ডোতে ইভেন্ট শ্রোতাদের যুক্ত করেন, ব্যবহারকারী অফলাইনে যান কিনা তা যাচাই করার জন্য, আপনি এটি করতে পারেন:
window.addEventListener("offline",
()=> console.log("No Internet")
);
এবং অনলাইনে কিনা তা পরীক্ষা করার জন্য:
window.addEventListener("online",
()=> console.log("Connected Internet")
);
onLine
। ব্রাউজারগুলি অনলাইনে থাকার অবস্থা খুব আলাদাভাবে সংজ্ঞায়িত করে। বিকাশকারী.মোজিলা.আর.ইন / ইউএস / ডকস / ওয়েবে / এপিআই / নেভিগেটরঅনলাইন / অন লাইন দেখুন ।
আমাকে এমন একটি গ্রাহকের জন্য একটি ওয়েব অ্যাপ তৈরি করতে হয়েছিল (এজাক ভিত্তিক) যা বিদ্যালয়ের সাথে প্রচুর পরিশ্রম করে, এই স্কুলগুলির প্রায়শই একটি খারাপ ইন্টারনেট সংযোগ থাকে আমি সংযোগ আছে কিনা তা সনাক্ত করতে এই সাধারণ ফাংশনটি ব্যবহার করি, খুব ভাল কাজ করে!
আমি কোডআইগনিটার এবং জ্যাকুরি ব্যবহার করি:
function checkOnline() {
setTimeout("doOnlineCheck()", 20000);
}
function doOnlineCheck() {
//if the server can be reached it returns 1, other wise it times out
var submitURL = $("#base_path").val() + "index.php/menu/online";
$.ajax({
url : submitURL,
type : "post",
dataType : "msg",
timeout : 5000,
success : function(msg) {
if(msg==1) {
$("#online").addClass("online");
$("#online").removeClass("offline");
} else {
$("#online").addClass("offline");
$("#online").removeClass("online");
}
checkOnline();
},
error : function() {
$("#online").addClass("offline");
$("#online").removeClass("online");
checkOnline();
}
});
}
আপনার অফলাইন থাকলে আপনার ডোমেনে একটি এজ্যাক্স কলটি সনাক্ত করার সহজতম উপায়
$.ajax({
type: "HEAD",
url: document.location.pathname + "?param=" + new Date(),
error: function() { return false; },
success: function() { return true; }
});
এটি কেবল আপনাকে ধারণা দেওয়ার জন্য, এটি উন্নত করা উচিত।
যেমন ত্রুটি = 404 এর অর্থ এখনও অনলাইনে থাকা উচিত
আমি মনে করি এটি খুব সহজ উপায়।
var x = confirm("Are you sure you want to submit?");
if (x) {
if (navigator.onLine == true) {
return true;
}
alert('Internet connection is lost');
return false;
}
return false;
if the browser is not able to connect to a local area network (LAN) or a router, it is offline; all other conditions return true
ইন্টারনেট ডাউন ছিল কিনা বা আমার সার্ভারটি ডাউন ছিল কিনা তা সনাক্ত করার জন্য আমি একটি ক্লায়েন্ট-সাইড সলিউশন খুঁজছিলাম। আমি অন্যান্য সমাধানগুলি সর্বদা খুঁজে পেয়েছি বলে মনে করি তৃতীয় পক্ষের স্ক্রিপ্ট ফাইল বা চিত্রের উপর নির্ভরশীল, যা আমার কাছে মনে হয় নি যে এটি সময়ের পরীক্ষায় দাঁড়াবে। একটি বাহ্যিক হোস্ট করা স্ক্রিপ্ট বা চিত্র ভবিষ্যতে পরিবর্তন হতে পারে এবং সনাক্তকরণ কোডটিকে ব্যর্থ করতে পারে।
আমি 404 কোড সহ একটি এক্সএইচআরস্ট্যাটাস সন্ধান করে এটি সনাক্ত করার একটি উপায় খুঁজে পেয়েছি। উপরন্তু, আমি সিওআরএস নিষেধাজ্ঞাকে বাইপাস করতে JSONP ব্যবহার করি। 404 ব্যতীত একটি স্থিতি কোড দেখায় যে ইন্টারনেট সংযোগ কাজ করছে না।
$.ajax({
url: 'https://www.bing.com/aJyfYidjSlA' + new Date().getTime() + '.html',
dataType: 'jsonp',
timeout: 5000,
error: function(xhr) {
if (xhr.status == 404) {
//internet connection working
}
else {
//internet is down (xhr.status == 0)
}
}
});
আমার পথ.
<!-- the file named "tt.jpg" should exist in the same directory -->
<script>
function testConnection(callBack)
{
document.getElementsByTagName('body')[0].innerHTML +=
'<img id="testImage" style="display: none;" ' +
'src="tt.jpg?' + Math.random() + '" ' +
'onerror="testConnectionCallback(false);" ' +
'onload="testConnectionCallback(true);">';
testConnectionCallback = function(result){
callBack(result);
var element = document.getElementById('testImage');
element.parentNode.removeChild(element);
}
}
</script>
<!-- usage example -->
<script>
function myCallBack(result)
{
alert(result);
}
</script>
<a href=# onclick=testConnection(myCallBack);>Am I online?</a>
কিছু পদ্ধতির সমস্যা navigator.onLine
হ'ল এগুলি কিছু ব্রাউজার এবং মোবাইল সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়, এমন একটি বিকল্প যা আমাকে প্রচুর সহায়তা করেছিল তা ছিল ক্লাসিক XMLHttpRequest
পদ্ধতিটি ব্যবহার করা এবং সেই সম্ভাব্য কেসটিও প্রত্যাশা করা ছিল যে প্রতিক্রিয়া সহ ফাইলটি ক্যাশে সংরক্ষণ করা হয়েছিল caseXMLHttpRequest.status
প্রত্যাশা করে যে তার চেয়ে বড় is 200 এবং 304 এর চেয়ে কম।
আমার কোডটি এখানে:
var xhr = new XMLHttpRequest();
//index.php is in my web
xhr.open('HEAD', 'index.php', true);
xhr.send();
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e) {
if (xhr.readyState == 4) {
//If you use a cache storage manager (service worker), it is likely that the
//index.php file will be available even without internet, so do the following validation
if (xhr.status >= 200 && xhr.status < 304) {
console.log('On line!');
} else {
console.log('Offline :(');
}
}
}
দুটি পৃথক সেনেরিয়োর জন্য 2 টি উত্তর রয়েছে: -
আপনি যদি কোনও ওয়েবসাইটে জাভাস্ক্রিপ্ট ব্যবহার করছেন (যেমন; বা কোনও সম্মুখ-প্রান্তের অংশ) এটি করার সহজতম উপায় হ'ল:
<h2>The Navigator Object</h2>
<p>The onLine property returns true if the browser is online:</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = "navigator.onLine is " + navigator.onLine;
</script>
তবে আপনি যদি সার্ভারের পাশের জেএস ব্যবহার করছেন (যেমন; নোড ইত্যাদি), আপনি নির্ধারণ করতে পারেন যে ব্যর্থ এক্সএইচআর অনুরোধ করে সংযোগটি হারিয়ে গেছে।
মানক পদ্ধতির অনুরোধটি হল কয়েকবার অনুরোধটি আবার চেষ্টা করা। যদি এটি অতিক্রম না করে তবে ব্যবহারকারীকে সংযোগটি পরীক্ষা করতে সতর্ক করুন, এবং নিখুঁতভাবে ব্যর্থ হন।
অনুরোধের ত্রুটি মধ্যে মাথা অনুরোধ
$.ajax({
url: /your_url,
type: "POST or GET",
data: your_data,
success: function(result){
//do stuff
},
error: function(xhr, status, error) {
//detect if user is online and avoid the use of async
$.ajax({
type: "HEAD",
url: document.location.pathname,
error: function() {
//user is offline, do stuff
console.log("you are offline");
}
});
}
});
আমার কাছে থাকা সহায়ক সহায়তার একটি স্নিপেট এখানে। এটি নামগতির জাভাস্ক্রিপ্ট:
network: function() {
var state = navigator.onLine ? "online" : "offline";
return state;
}
আপনার পদ্ধতিটি সনাক্তকরণের সাথে এটি ব্যবহার করা উচিত অন্যথায় এটি করার একটি 'বিকল্প' উপায় বন্ধ করে দেওয়া উচিত। সময়টি খুব দ্রুত এগিয়ে আসছে যখন এই সমস্ত প্রয়োজন হবে। অন্যান্য পদ্ধতি হ্যাক হয়।