phonegap源碼分析(二)—— Windows Phone

來源:互聯網
上載者:User

接著研究phonegap在其他平台上的實現,今日看看Windows Phone(WP)。

在WP上做JS和OS的互連比較簡單,因為內建的WebBrowser提供了比較好的與JS的互連機制,包括JS調進來和回調JS,下面先看看架構圖,和android非常類似:

下面重點談談JS與WP OS的互連

1)JS端調用WP端

WP提供了WebBrowser.ScriptNotify Event,它可以讓JS裡調用window.external.notify時,調到MainPage裡載入的WebBrowser裡ScriptNotify方法,具體可見下面的文檔:

http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.scriptnotify%28v=vs.95%29.aspx

Phonegap用PGView封裝了WebBrowser:

[html] view
plaincopy

  1. <Grid x:Name="LayoutRoot" Background="Transparent">  
  2.           
  3.         <phone:WebBrowser x:Name="GapBrowser"   
  4.                           HorizontalAlignment="Stretch"    
  5.                           VerticalAlignment="Stretch"   
  6.                           IsScriptEnabled="True"   
  7.                           Foreground="White"  
  8.                           Navigated="GapBrowser_Navigated"   
  9.                           Loaded="GapBrowser_Loaded"   
  10.                           Unloaded="GapBrowser_Unloaded"   
  11.                           ScriptNotify="GapBrowser_ScriptNotify"   
  12.                           LoadCompleted="GapBrowser_LoadCompleted"   
  13.                           Navigating="GapBrowser_Navigating"   
  14.                           NavigationFailed="GapBrowser_NavigationFailed"   
  15.                           IsGeolocationEnabled="True" />  
  16.           
  17.     </Grid>  


於是乎GapBrowser_ScriptNotify成了WP OS對JS的介面,GapBrowser_ScriptNotify裡面再通過參數動態反射相應的Command來響應各種需求

2)WP端反調JS返回結果

WP提供了webBrowser.InvokeScript,它可以從OS端調用已在WebBrowser裡載入了的JS中的方法,由於有了這個特性,大大簡化了返回調用結果的實現,不像android上還需ajax或JSONP那麼麻煩。這樣一來也不需要區分同步或非同步呼叫,統一用非同步呼叫就行了

下面看看一去一回的時序圖:

另外值得一提的是WP上沒有像android那樣通過一個plugin.xml來配置OS端邏輯的實現,而是直接通過傳進去的包名+類名來反射command類,如果是phonegap系統提供的command,就直接用類名來映射,如果是自己開發的command,則需要通過"包名.類名"來映射。

通過這兩天看phonegap在android端和wp端的實現,有點感覺它是在做苦力活,方便了別人苦了自己,為了給使用者一致的JS API,使得它需要根據各個平台對JS相容的特點,做Adapter,所以從大的架構層面上看,phonegap無太多創新可言,它的核心價值就是勤勤懇懇地處理了各個平台一些核心API調用上的差異

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.