.net core 和 WPF 開發升訊威在線客服與營銷系統:實現對 IE8 的完全完美支援 【乾貨】

本系列文章詳細介紹使用 .net core 和 WPF 開發 升訊威在線客服與營銷系統 的過程。本產品已經成熟穩定並投入商用。
在線演示環境://kf.shengxunwei.com 注意:演示環境僅供演示交流與評估,不保證 7×24 小時可用。

文章目錄列表請點擊這裡


對於在線客服與營銷系統,對瀏覽器的兼容性和支援至關重要。我在設計之初,就考慮了這個問題,訪客端必須支援 IE8 以上的所有PC端和移動端瀏覽器。並且能夠根據瀏覽器的片本,自動切換不同的能信方式,始終選擇最優的方式與服務端通訊。

此外,還需要考慮到對網路的波動的兼容,訪客所使用的網路五花八門,使用手機時,APP隨時會被切換到後台導致中斷網路,或者訪客本身所處的車庫、電梯、郊外網路不佳,時斷時續。系統必須能夠合理的處理這些情況,做到:

  • 不中斷會話
  • 不丟失消息。

這裡存在幾個技術難點需要注意:

  • IE8 和 IE9 不支援 WebSocket 通訊,只能降級使用 Http Ajax 請求。
  • 短時間的網路中斷,再次連接時,不可認為是新會話,必須能夠接著進行未完成的會話。
  • 訪客端頁面的排版布局,必須完全兼容 IE8 和 IE9,做到美觀一致。

本文我將詳細的解釋這些問題,以及如何實現對 IE8 的完全完美的兼容。

訪客端在 IE8 下的效果:

客服端與使用 IE8 的訪客進行交流:


首先判斷用戶的瀏覽器版本

首先我們能過 User-Agent 判斷訪客所使用的瀏覽器。
User-Agent通常格式:

Mozilla/5.0 (平台) 引擎版本 瀏覽器版本號

IE8 的 User-Agent:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)

IE9 的 User-Agent:

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

我們可以通過 JavaScript 從用戶的瀏覽器中得到 User-Agent

  var ua = navigator.userAgent;

獲得 User-Agent 之後,我們通過對內容的判斷,就很容易知道用戶使用的瀏覽器版本,從而為後續的工作做準備。

從 WebSocket 降級到 HTTP Ajax

當我們判斷用用戶的瀏覽器不支援 WebSocket 時,就需要對通訊方式進行降級,我們使用 XMLHttpRequest 對象進行 HTTP 非同步通訊。

XMLHttpRequest 能夠:

  • 在不重新載入頁面的情況下更新網頁
  • 在頁面已載入後從伺服器請求數據
  • 在頁面已載入後從伺服器接收數據
  • 在後台向伺服器發送數據

通過一行簡單的 JavaScript 程式碼,我們就可以創建 XMLHttpRequest 對象。

var xhr = new XMLHttpRequest();

該構造函數用於初始化一個 XMLHttpRequest 實例對象。在調用下列任何其他方法之前,必須先調用該構造函數,或通過其他方式,得到一個實例對象。

XMLHttpRequest 有一個 onreadystatechange 。它的值 (state_Change) 是一個函數的名稱,當 XMLHttpRequest 對象的狀態發生改變時,會觸發此函數。狀態從 0 (uninitialized) 到 4 (complete) 進行變化。在狀態為 4 時,我們執行程式碼進行通訊。

程式碼示例:

var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=new XMLHttpRequest();
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
  }
else
  {
  alert("Your browser does not support XMLHTTP.");
  }
}

function state_Change()
{
if (xmlhttp.readyState==4)
  {// 4 = "loaded"
  if (xmlhttp.status==200)
    {// 200 = OK
    // ...our code here...
    }
  else
    {
    alert("Problem retrieving XML data");
    }
  }
}

我們只需要在 xmlhttp.status 狀態程式碼為 200 時,處理從伺服器返回的數據即可。


本文對客服系統如何兼容 IE8 進行了簡要的介紹,在接下來的文章中,我將具體解構服務端程式的結構和設計、客服端程式的結構和設計,敬請關注。


在線演示環境://kf.shengxunwei.com 注意:演示環境僅供演示交流與評估,不保證 7×24 小時可用。

聯繫QQ: 279060597
聯繫E-mail:[email protected]