最近也遇到這個問題,把我解決的思路記錄一下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 方式加載便可。
四、參考文檔: