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


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

 

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、參考文檔:

WKWebView使用遇到的坑

iOS 8 WKWebView 知識點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM