oc嵌套JS+HTML 踩的坑~ iOS篇

我怎麼會打死他,當然是選擇原諒

前言:
最近在研究整個界面用oc嵌套html+js做這麼個東西,需求大概就是用webView(wkwebview)加載本地html,然後oc和js互相引用(iOS用JSC引擎做交互吧不會卡線程之類的很好用),然後我就遇到了一個坑,淚奔啊,找啊找查啊查(在這還要感謝我給力的同事們),可算是破解了,今天我要分享給大家~~~

究竟是什麼坑?
在本人拖入html之後界面試了好幾次本地webview加載,卻總也加載不出來,這個我也是問了幾個人,加載本地,大家給的都是一下答案
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *htmlPath = [path stringByAppendingString:@”ui.html”];
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:htmlPath]]];
這個加載本地webview想必大家非常熟練,方法上出錯也是不可能的,但是很少有人會注意到這麼獲取本地資源會出現路徑的問題!路徑路徑路徑 !

解決辦法和注意點
在ios項目下添加本地HTML+JS/css/image 當拖入項目時有兩種選擇:
 一個是 Create groups for any added folders (創建虛擬結構-包結構)
 一個是 Create folder references for any added folders (創建實體結構)

注意:

  • 選第一個Create group:

當文件夾被引入後,引入的文件會被加到同一個文件夾下而忽略了原本的文件路徑,而html他們給的文件夾路徑必然是原來他們設定好的,如果選這個引入後人家原來關聯的css啊還是img的路徑就亂了,因此在HTML文件中的路徑就會出現問題,圖片什麼的肯定show不出來了,但不會報錯。

選擇使用這個,代碼就如下,但是搞不好人家路徑識別不了。
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *htmlPath = [path stringByAppendingString:@”ui.html”];
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:htmlPath]]];

  • 選第二個Create folder references:

    選擇這個添加完成後,編譯過後引入的文件會按照原本的目錄結構存放,然後添加相對路徑,就完美的解決了路徑問題,。

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"js_html/ui.html" relativeToURL:[[NSBundle mainBundle] bundleURL]]]];

這裏寫圖片描述
css、img在html裏寫的時候應該是原路徑相互關聯設定好的。我當然是選擇~~不是原諒他啊(偷笑.png),是第二個Create folder references。

其他解決方法,我們可以加到沙盒中從沙盒讀取,還要什麼解決辦法大家可以自己想下。

最後,希望大家細心點完美的跳過此坑~~~

怎麼使用oc與js交互也非常簡單,之後持續更新~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章