1. 程式人生 > 其它 >mui技術點01.手機網路連線的判斷

mui技術點01.手機網路連線的判斷

# 問題說明

手機未連線網路,app訪問後臺介面時出現錯誤。

# 解決方案

每個畫面初始時,判斷網路是否連線,網路如果處於斷網階段,彈出視窗資訊直接退出app,或者畫面顯示[未聯網]訊息提示,提示使用者重新整理網路(比如:點選重新整理按鈕,或者下拉等操作)。

# 詳細程式碼

## 直接退出app

1. 檢測是否連線網路

//mui檢測是否連線網路
function getSysInfo() {
	//  var str = "";
	//  str += "名稱:" + plus.os.name + "\n";
	//  str += "版本:" + plus.os.version + "\n";
	//  str += "語言:" + plus.os.language + "\n";
	//  str += "廠商:" + plus.os.vendor + "\n";
	//  str += "網路型別:";

	types = {};
	types[plus.networkinfo.CONNECTION_UNKNOW] = "未知";
	types[plus.networkinfo.CONNECTION_NONE] = "未連線網路";
	types[plus.networkinfo.CONNECTION_ETHERNET] = "有線網路";
	types[plus.networkinfo.CONNECTION_WIFI] = "WiFi網路";
	types[plus.networkinfo.CONNECTION_CELL2G] = "2G蜂窩網路";
	types[plus.networkinfo.CONNECTION_CELL3G] = "3G蜂窩網路";
	types[plus.networkinfo.CONNECTION_CELL4G] = "4G蜂窩網路";

	var str = types[plus.networkinfo.getCurrentType()];
	if (str == '未知' || str == '未連線網路') {
		return false;
	} else {
		return true;
	}

}

2. 呼叫及處理

mui.plusReady(function() {

	//如果未連線網路,退出app(針對mui框架)
	if (!(getSysInfo())) {
		alert('網路連線失敗,請退出並重置網路!');
		plus.runtime.quit();//退出app(針對mui框架)
		return;
	}
});

## 畫面顯示提示按鈕,讓使用者手動重新整理

1. 點選按鈕,進行畫面重新整理

詳細程式碼

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport"
		content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
	<title>網路未連線</title>
	<link href="css/mui.min.css" rel="stylesheet" />
	<style>
		.mui-btn {
			display: block;
			width: 60px;
			margin: 10px auto;
		}

		#info {
			padding: 10px 5px;
		}
	</style>
</head>
<body>

	<header class="mui-bar mui-bar-nav">
		<h1 class="mui-title">按鈕點選重新整理</h1>
	</header>

	<div id="content" class="mui-content">
		<div class="mui-content-padded" style="margin: 50px;text-align: center;">
			<div id="info"></div>
			<button id="button" type="button" class="mui-btn mui-btn-outlined">重新整理</button>
		</div>
	</div>

	<script src="js/mui.min.js"></script>
	<script type="text/javascript" charset="utf-8">
		mui.init();
		var info = document.getElementById("info");
		(function($) {
			mui.toast('畫面初始化!');
			info.innerText = '網路未連線,請連線網路後重新整理!';
		})(mui);

		document.getElementById("button").addEventListener('tap', function() {
			location.reload();
		});
	</script>
</body>
</html>

2. 下劃畫面重新整理

詳細程式碼

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport"
		content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
	<title>網路未連線</title>
	<link href="css/mui.min.css" rel="stylesheet" />
	<style>
		#info {
			padding: 10px 5px;
		}
	</style>
</head>
<body>

	<header class="mui-bar mui-bar-nav">
		<h1 class="mui-title">畫面下拉重新整理</h1>
	</header>

	<div id="content" class="mui-content">
		<div class="mui-content-padded" style="margin: 50px;text-align: center;">
			<div id="info"></div>
		</div>
	</div>

	<script src="js/mui.min.js"></script>
	<script type="text/javascript" charset="utf-8">
		var info = document.getElementById("info");
		mui.init({
		pullRefresh: {
				container: "#content", //待重新整理區域標識,querySelector能定位的css選擇器均可,比如:id、.class等
				down: { //下拉重新整理
					style: 'circle', //必選,下拉重新整理樣式,目前支援原生5+ ‘circle’ 樣式
					height: 50, //可選,預設50.觸發下拉重新整理拖動距離,
					auto: false, //可選,預設false.首次載入自動下拉重新整理一次
					contentdown: "下拉可以重新整理", //可選,在下拉可重新整理狀態時,下拉重新整理控制元件上顯示的標題內容
					contentover: "釋放立即重新整理", //可選,在釋放可重新整理狀態時,下拉重新整理控制元件上顯示的標題內容
					contentrefresh: "正在重新整理...", //可選,正在重新整理狀態時,下拉重新整理控制元件上顯示的標題內容
					callback: function() { //必選,重新整理函式,根據具體業務來編寫,比如通過ajax從伺服器獲取新資料;
						//模擬向伺服器獲取資料的等待時間
						sleep(1000);
						location.reload();
					}
				}
			}
		});

		(function($) {
			info.innerText = '網路未連線,請網路連線後,下拉重新整理進行頁面重新整理!';
			mui.toast('畫面初始化!');
		})(mui);

		//模擬執行緒等待,ms:單位毫秒
		function sleep(ms) {
			return new Promise(resolve => setTimeout(resolve, ms));
		}
	</script>
</body>
</html>

## 注意

1. 內建瀏覽器技術實現,但手機上未必實現,調研的結果在手機上驗證之後,在進行專案程式碼合併。

2. 關於下拉重新整理詳細的引數,請參照官網的文件說明:https://dev.dcloud.net.cn/mui/pulldown/