關於用wkwebview加載沙盒documents下html文件 模擬器能夠,真機不行的解決方案

最近也遇到這個問題,把我解決的思路記錄一下css

 

一、問題:html

用wkwebview加載(loadRequest)沙盒documents下html文件 模擬器能夠,真機不行ios

(前提是html內部含引用外聯樣式js等)web

 

二、解決及分析:api


對於uiwebview,在模擬器和真機下,咱們用loadrequest都是能夠請求html的,沒有問題。安全


不過對於wk來講,在安全性上,蘋果作了限制,模擬器能夠,device真機上有所區別post

緣由是WKWebView是不容許經過loadRequest的方法來加載本地根目錄的HTML文件,也就是說,咱們用loadrequest方式加載的路徑,因爲內部引用了其餘路徑的內容,蘋果以爲這樣作不安全,就給你限制了,因此這些樣式、js等就都失效了。ui


一、不過對於ios9及之後,咱們可使用loadFileURL來實現,這個也是蘋果在ios9以後提供的api。url

wkwebview.loadFileURL(url, allowingReadAccessTo: accessUrl)

參數解釋:code

url:html所在的path路徑

allowingReadAccessTo :表示受權路徑,html裏使用的css、js等文件(若是有外聯引用)都要包含在內。

關於loadFileURL方法的講解,能夠參考這篇 ,寫得很棒:http://www.javashuo.com/article/p-omtazkoo-r.html 

 


二、對於ios9以前系統,咱們就要經過其餘捷徑來實現了,根據其餘資料查詢,找到一種以下:

將document下的html等資源文件,拷貝到tmp下,而後在請求時,將路徑轉爲tmp下便可。

不過tmp文件有個不定時會被清理的隱患,因此最好在每次啓動時檢測一遍。

如何實現可參考:https://www.jianshu.com/p/ccb421c85b2e

 

三、此外,我發現除了loadrequest方法,loadHTMLString也會存在以上問題

我實驗了不少次,loadHTMLString請求數據時,模擬器能夠正常顯示有外聯樣式的html,不過在真機下就不行了,若是用這種方法,可能只能用其餘方式處理了

好比:

一、改用uiwebview

二、轉換思路,若是以前用html拼接好內容,咱們能夠提取出內容,而後create到本地,再用 loadFileURL 方式加載便可。

 

四、參考文檔:

WKWebView使用遇到的坑

iOS 8 WKWebView 知識點

相關文章
相關標籤/搜索