Weex 是一個跨平台解決方案,Web 平台只是其一種運行環境,除此之外還可以在 Android 和 iOS 客戶端中運行。原生開發平台和 Web 平台之間的差異,在功能和開發體驗上都有一些差異。
Weex 環境中沒有 DOM
DOM(Document Object Model),即文檔對象模型,是 HTML 和 XML 文檔的編程接口,是 Web 中的概念。Weex 的運行環境以原生應用為主,在 Android 和 iOS 環境中渲染出來的是原生的組件,不是 DOM Element。
不支持 DOM 操作
既然原生環境中不支持 Web API,沒有 Element
、Event
、File
等對象,詳細列表可以參考 Web APIs on MDN。不支持選中元素,如 document.getElementById
、 document.querySelector
等;當然也不支持基於 DOM API 的程序庫(如 jQuery)。
有限的事件類型
Weex 支持在標簽上綁定事件,和在瀏覽器中的寫法一樣,但是 Weex 中的事件是由原生組件捕獲並觸發的,行為和瀏覽器中有所不同,事件中的屬性也和 Web 中有差異。
- 並不支持 Web 中所有的事件類型,詳情請參考《通用事件》。
- 不區分事件的捕獲階段和冒泡階段,相當於 DOM 0 級事件。
Weex 環境中沒有 BOM
BOM(Browser Object Model),即瀏覽器對象模型,是瀏覽器環境為 javascript 提供的接口。Weex 在原生端沒有並不基於瀏覽器運行,不支持瀏覽器提供的 BOM 接口。
沒有 window
、screen
對象
Weex 中並未提供瀏覽器中的 window
和 screen
對象,不支持使用全局變量。如果是想要獲取設備的屏幕或環境信息,可以使用 WXEnvironment
變量。
WXEnvironment
weexVersion
: WeexSDK 的版本。appName
: 應用的名稱。appVersion
: 應用的版本。platform
: 運行平台,可能的值是Web
、Android
、iOS
之一。osName
: 系統的名稱。osVersion
: 系統版本。deviceWidth
: 設備寬度。deviceHeight
: 設備高度。
沒有 document
對象
在瀏覽器中 document
表示了當前活動的文檔模型,在 Android 和 iOS 環境中並沒有這個對象,也不支持與其相關的 DOM 操作。
沒有 history
、location
、navigator
對象
history
保存了當前頁面的歷史記錄,並且提供了前進后退操作。location
記錄了當前頁面 URL 相關的信息。navigator
記錄了當前瀏覽器中的信息。
這些接口與瀏覽器自身的實現有關,可以控制頁面的前進后退並且獲取狀態信息。雖然在 Android 和 iOS 中也有“歷史”和“導航”的概念,但是它是用於多個管理視圖之間的跳轉的。換句話說,在瀏覽器中執行“前進”、“后退”仍然會處於同一個頁簽中,在原生應用中“前進”、“后退”則會真實的跳轉到其他頁面。
此外 Weex 也提供了 navigator
模塊來操作頁面的跳轉,使用方法參考《navigator 導航控制》。
能夠調用移動設備原生 API
在 Weex 中能夠調用移動設備原生 API,使用方法是通過注冊、調用模塊來實現。其中有一些模塊是 Weex 內置的,如 clipboard 、 navigator 、storage 等。
為了保持框架的通用性,Weex 內置的原生模塊有限,不過 Weex 提供了橫向擴展的能力,可以擴展原生模塊,具體的擴展方法請參考《iOS 擴展》 和《Android 擴展》。
有些接口在瀏覽器環境中也存在,不過在使用時應該注意瀏覽器的兼容性;如剪貼板功能,出於安全性考慮,絕大多數瀏覽器都限制其使用