最近也遇到這個問題,把我解決的思路記錄一下
1、問題:
用wkwebview加載(loadRequest)沙盒documents下html文件 模擬器可以,真機不行
(前提是html內部含引用外聯樣式js等)
2、解決及分析:
對於uiwebview,在模擬器和真機下,我們用loadrequest都是可以請求html的,沒有問題。
不過對於wk來說,在安全性上,蘋果做了限制,模擬器可以,device真機上有所區別
原因是WKWebView是不允許通過loadRequest的方法來加載本地根目錄的HTML文件,也就是說,我們用loadrequest方式加載的路徑,由於內部引用了其他路徑的內容,蘋果覺得這樣做不安全,就給你限制了,所以這些樣式、js等就都失效了。
1、不過對於ios9及以后,我們可以使用loadFileURL來實現,這個也是蘋果在ios9之后提供的api。
wkwebview.loadFileURL(url, allowingReadAccessTo: accessUrl)
參數解釋:
url:html所在的path路徑
allowingReadAccessTo :表示授權路徑,html里使用的css、js等文件(如果有外聯引用)都要包含在內。
關於loadFileURL方法的講解,可以參考這篇 ,寫得很棒:https://www.cnblogs.com/breezemist/p/4595906.html
2、對於ios9之前系統,我們就要通過其他捷徑來實現了,根據其他資料查詢,找到一種如下:
將document下的html等資源文件,拷貝到tmp下,然后在請求時,將路徑轉為tmp下即可。
不過tmp文件有個不定時會被清理的隱患,所以最好在每次啟動時檢測一遍。
如何實現可參考:https://www.jianshu.com/p/ccb421c85b2e
3、此外,我發現除了loadrequest方法,loadHTMLString也會存在以上問題
我實驗了很多次,loadHTMLString請求數據時,模擬器可以正常顯示有外聯樣式的html,不過在真機下就不行了,如果用這種方法,可能只能用其他方式處理了
比如:
1、改用uiwebview
2、轉換思路,如果之前用html拼接好內容,我們可以提取出內容,然后create到本地,再用 loadFileURL 方式加載即可。
4、參考文檔: