歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 嵌入式 Linux 智能設備應用中 web 支持的實現,第 2 部分

嵌入式 Linux 智能設備應用中 web 支持的實現,第 2 部分

日期:2017/2/28 16:39:17   编辑:Linux教程
由兩篇文章組成的系列文章主要闡述如何在嵌入式 Linux 智能設備的應用程序中增加 Web 支持。第 1 部分介紹了如何設備上提供常規 Web 功能的支持。本文是第 2 部分,將重點介紹如何讓在嵌入式設備上運行的 Web 程序能支持設備本身特有的功能。本文分別以四種應用場景為例,介紹如何通過修改浏覽器內核代碼來實現設備本地應用和 Web 結合的功能。

Web 與本地應用的關聯

雖然在嵌入式 Linux 智能設備中采用 Web 支持已經解決了很多問題,但是還有一些和設備相關的特殊功能是 Web 支持不能提供的。比如廣告機中的音視頻播放功能,條碼掃描機的模式識別功能,還有與某種外設的通信等。這些並不是 HTML 和浏覽器的標准所包含的,而是需要本地應用的支持。既然我們希望使用 Web 和 B/S 等技術來實現我們的應用,那麼這些本地應用功能也應該由 Web 來控制。比如說廣告機的視頻播放,實際的播放是由本地應用實現的,但是什麼時候在什麼位置播放什麼視頻應該由 Web 來決定。並且廣告頁面內容的編輯也應該在網頁的 HTML 中體現,而不需要另外一套播放控制機制。

但是想要由 Web 來控制本地應用存在一個問題,這些本地應用的調用沒有一種統一的機制。有的可能通過驅動,有的可能是通過 I2C、串口的通訊口,有的可能是第三方提供的庫,還有的可能是與其他進程的通信。可以說,除了他們大多用 C/C++ 語言進行開發之外,幾乎沒有什麼共同點。

那麼現在我們要解決的問題就是,當 QWebView 渲染一個網頁的時候,如何讓我們在網頁裡編寫的一些特定的 HTML 能和我們的 C/C++ 代碼關聯起來。幸運的是,Qt 封裝的 WebKit 提供了多種方法使我們可以很好實現這個關聯。接下來,我們會以幾種應用場景為例來討論 Web 和本地應用關聯的幾種實現方法。

截取 request 的方法

首先我們介紹第一種應用場景:某嵌入式智能設備需要實現下面的功能,用戶點擊網頁上“更新”的鏈接,設備就會下載指定的 Firmware 並且進行更新。

為了實現這個功能,客戶端的浏覽器需要在用戶點擊了某個特定的 Link 之後,啟動系統的更新過程。包括獲取最新 Firmware 的地址,進行下載,最後更新設備。Firmware 的更新過程和設備硬件相關,標准浏覽器不能實現這個功能,因此我們必須“截獲”用戶的這個請求,然後使用本地代碼來完成整個更新過程。

為了實現截獲用戶的這個 HTML request,我們先分析一下 QWebView 的結構。


圖 1. QWebView 的結構圖

QWebView 使用 QWebPage 來實現頁面,QWebPage 使用 QWebFrame 來實現頁面元素。當頁面發出一個 Navigation 的 request 時,QWebPage 會來進行處理。這個時候有一個函數會被調用:

Copyright © Linux教程網 All Rights Reserved