iOS 混合應用的關鍵點分析 - 仿 Android 平台 WebView 可注入本機物件方法的功能實現要點

來源:互聯網
上載者:User

標籤:

iOS 混合應用的關鍵點分析 - 仿 Android 平台 WebView 可注入本機物件方法的功能實現要點

太陽火神的美麗人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商業用途-保持一致”創作公用協議

轉載請保留此句:太陽火神的美麗人生 -  本部落格專註於 敏捷開發及移動和物聯裝置研究:iOS、Android、Html5、Arduino、pcDuino,否則,出自本部落格的文章拒絕轉載或再轉載,謝謝合作。



對於 iOS 和 Android 平台來說,各自的流暢覽器組件 UIWebView 和 WebView 都可以很容易地在本地代碼中調用 WebView 內頁面 JS 指令碼。

然後,從 JS 調用本地方法,只有 Android 平台的 WebView 組件提供了,這也很容易理解,畢竟 Android WebView 組件以 Java 實現,想向其反射注入些功能也時很容易的,但具體實現尚未去分析源碼證實。


對於 iOS 來說,只有一個切入點,那就是通過 UIWebViewDelegate 的頁面載入事件,獲得到頁面內的載入事件。

那麼如何在頁面內很容易地觸發一個頁面載入事件,以便能在本地代理方法中截獲並響應這一 HTML 頁面內事件呢?

這一問題,即已抽象出了函數調用方的事件觸發,和函數被調方的事件響應機制的映射雙方。


1、通過 a 標籤,早些年的 PhoneGap 架構即為這樣實現的,不過感覺有些拘束;

2、加入 input 組件,並設定為隱藏狀態,通過設定其 onClick 事件,動態更新其載入的連結,這個對原頁面有要求,且附屬操作過多;

3、像 img 的頁面二次載入其 src 指定圖片的原理,即不會影響原頁面產生重新整理,又會觸發頁面載入;

    實際測試發現,該組件只在頁面初次載入時,進行串列載入,即使加了 defer 或 async 參數,也無法動態觸發。

    後發現一個開源庫,其採用了 iframe 的 src 來觸發載入,動態將 iframe 添加到頁面,就會觸發載入 src 連結的事件,能被本地捕獲,然後馬上再移除這個 iframe。


這個開源庫能很好地將 iOS 本機物件的所有方法動態載入給當前頁面的 window 對象,可以在頁面內直接調用對應對象的方法。


不過該庫實現者對 iOS 方法簽名的理解有誤,所以,對於多參數方法,並沒有能很好地解決。



iOS 混合應用的關鍵點分析 - 仿 Android 平台 WebView 可注入本機物件方法的功能實現要點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.