這裡用到了nsurlprotocol來實現載入這些本地檔案:
1.先子類化乙個nsurlprotocol。
2.在你的uiwebview裡註冊這個nsurlprotocol協議。
每當你的uiwebview傳送請求的時候,nsurlprot
ocol都會執行下面的方法
+ (bool)caninitwithrequest:(nsurlrequest *)request
返回yes,則會繼續執行下面的+ (nsurlrequest *)canonicalrequestforrequest:(nsurlrequest *)request
- (void)startloading
等方法。否則則不執行。
這時候我們就會想在startloading方法裡面去載入那些本地框架。
下面貼**:
+ (bool)caninitwithrequest:(nsurlrequest *)request
//如果工程裡找不到某檔案,return no;
nsstring *tempurl = request.url.resourcespecifier;
if (tempurl != nil && ![tempurl isequal: @""])
else
nsarray *array = [tempurl componentsseparatedbystring:@"/"];
if (array.count>0)
nsstring *path= [[nsbundle mainbundle] pathforresource:tempurl oftype:nil];
if (!path)
//如果在工程下找到滿足條件檔案,則可執行startloading
nsstring * url = request.url.absolutestring;
if ([url rangeofstring:@".js"].location != nsnotfound || [url rangeofstring:@".css"].location != nsnotfound)
return no;
}
下面是關鍵:
- (void)startloading
nsstring *path= [[nsbundle mainbundle] pathforresource:url oftype:nil];//這裡是獲取本地資源路徑 如 :js、css 等
if (!path)
//根據路徑獲取mimetype (以下函式方法需要新增.h檔案的引用,)
// get the uti from the file's extension:
cfstringref pathextension = (__bridge_retained cfstringref)[path pathextension];
cfstringref type = uttypecreatepreferredidentifierfortag(kuttagclassfilenameextension, pathextension, null);
cfrelease(pathextension);
// the uti can be converted to a mime type:
nsstring *mimetype = (__bridge_transfer nsstring *)uttypecopypreferredtagwithclass(type, kuttagclassmimetype);
if (type != null)
cfrelease(type);
// 這裡需要用到mimetype
nsurlresponse *response = [[nsurlresponse alloc] initwithurl:super.request.url
mimetype:mimetype
expectedcontentlength:-1
textencodingname:nil];
nsdata *data = [nsdata datawithcontentsoffile:path];//載入本地資源
debuglog(@"要替換的本地資源路徑:%@",path);
//硬編碼 開始嵌入本地資源到web中
[[self client] urlprotocol:self didreceiveresponse:response cachestoragepolicy:nsurlcachestoragenotallowed];
[[self client] urlprotocol:self didloaddata:data];
[[self client] urlprotocoldidfinishloading:self];
}
這樣每次uiwebview載入網頁的時候遇到符合條件(即本地)的檔案時,便會載入本地檔案。
that's all.
iOS載入本地HTML
目標 讀取本地的html檔案來展示h5頁面。ios8以後,蘋果推出了新框架webkit。所以分別用uiwebview和wkwebview來實現看看。以下僅當html檔案的檔名為index.html。webview除錯方法是在模擬器顯示webview之後,開啟safari的 開發 tab的simula...
載入js,css等靜態檔案失敗的解決方法
第一 在web.xml裡面新增這段 注意 一定一定要放在org.springframework.web.servlet.dispatcherservlet前面!第二 還要在springmvc的配置檔案dispatcherservlet.xml裡面加這句 或者加下面這幾句 有其他要載入的檔案資源,請按...
iOS載入本地html,css樣式失效問題
檔案拖入專案的時候選的 這樣的話,檔案在編譯成 ipa 的時候。檔案會拷貝到根目錄下。而 中是這樣寫的,nsstring filepath nsbundle mainbundle pathforresource protocol oftype html indirectory nsstring ht...