iOS載入本地HTML

2021-07-30 16:32:52 字數 2212 閱讀 8521

目標:讀取本地的html檔案來展示h5頁面。

ios8以後,蘋果推出了新框架webkit。所以分別用uiwebviewwkwebview來實現看看。

以下僅當html檔案的檔名為index.html

webview除錯方法是在模擬器顯示webview之後,開啟safari的"開發"tab的simulator。

nsstring *filepath = [[nsbundle mainbundle] pathforresource:@"index" oftype:@"html"];

nsstring *htmlstring = [nsstring stringwithcontentsoffile:filepath encoding:nsutf8stringencoding error:nil];

nsurl *url = [[nsurl alloc] initwithstring:filepath];

[self.webview loadhtmlstring:htmlstring baseurl:url];

以上是把html檔案讀取成字串再載入到webview中,這時傳遞的url還沒有帶上hash tag和引數。

除了載入html字串以外還可以直接載入檔案路徑的請求:

nsstring *filepath = [[nsbundle mainbundle] pathforresource:@"index" oftype:@"html"];

nsurl *url = [[nsurl alloc] initwithstring:filepath];

nsurlrequest *request = [nsurlrequest requestwithurl:url];

[self.webview loadrequest:request];

那麼要在url上加上hash tag和傳入引數很簡單,只需要在url上拼接上去就可以了。

nsstring *component = @"#!/login?id=1&user=admin";

nsurl *url = [[nsurl alloc] initwithstring:urlstring];

但是這樣有乙個問題就是url傳入的時候一些特殊符號會有編碼問題。

nsstring *encodedcomponent = (nsstring *)cfbridgingrelease(

cfurlcreatestringbyaddingpercentescapes(

kcfallocatordefault,

(cfstringref)component,

(cfstringref)@"!$&'()*+,-./:;=?@_~%#",

null,

kcfstringencodingutf8));

nsurl *url = [[nsurl alloc] initwithstring:urlstring];

到此就可以滿足上述的目標了。

不過這裡有乙個其他問題,uiwebview會有記憶體占用非常高而且不釋放導致溢位的問題,這裡也順便記錄一下普遍的解決方法。

當收到系統的記憶體告警時,清除所有快取的response。

- (void)didreceivememorywarning

- (void)webviewdidfinishload:(uiwebview *)webview

- (void)dealloc

wkwebview速度更快,記憶體占用少。使用的方法和uiwebview的方法差不多。

列幾個關於wkwebview的問題:

nsurl *fileurl = [[nsurl alloc] initwithstring:filepath];

nsurl *url = [nsurl urlwithstring:encodedcomponent relativetourl:fileurl];

這個我在用模擬器測試的過程中並沒有出現相應的錯誤。

載入本地Html檔案

uiwebview webview uiwebview alloc initwithframe cgrectmake 0,0,320,480 autorelease nsstring htmlpath nsbundle quartz2d.html htmlpath htmlpath stringby...

載入本地HTML檔案

當我們載入乙個本地html檔案的時候,乙個資料夾裡還有css js image檔案,所以單獨載入乙個html檔案會沒有,只有文字,解決方案如下 載入部分 nsstring pathstr nsbundle mainbundle pathforresource go live oftype html ...

WebView 載入本地的html

1 可以是用loaddata,這種方法需要先將html檔案讀取出來,以字串傳入loaddata,可以展示頁面,但是不會引用css js等檔案。2 使用loadurl,不過需要注意,這裡因為是使用本地資料,所以傳入的url需要做些處理,例如 a 如果html檔案存於assets 則加字首 file a...