iOS之在webView中引入本地html,image,js,css文件的方法

項(xiàng)目需求
最近開發(fā)的項(xiàng)目,需要一個(gè)webView俄占,同時(shí)這個(gè)webView會需要引入一些項(xiàng)目中的資源image,js,css

在webView中引入本地的html文件
這里最主要的一個(gè)webView的方法是:loadHTMLString:baseURL: 把HTML文件的內(nèi)容以字符串的形式加載到webView里面萝招,然后解析

加載webview的代碼如下
   // get the model which is a html file for the webView
NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
// load the html file to webView
[_webView loadHTMLString:htmlCont baseURL:nil];

通過上述方法矾飞,很方便的就能把一個(gè)HTML文件加載到webView中筒饰,很簡單吧围俘,接下來悍引,來點(diǎn)進(jìn)階功能恩脂!

在webView中引入本地的image文件

這個(gè)功能的實(shí)現(xiàn)是承接上面那個(gè)方法的進(jìn)一步擴(kuò)展,最關(guān)鍵的是那個(gè)baseURL趣斤。先看實(shí)現(xiàn)代碼:

// get the model which is a html file for the webView
NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];  
  // 獲取當(dāng)前應(yīng)用的根目錄
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];    
// 通過baseURL的方式加載的HTML
// 可以在HTML內(nèi)通過相對目錄的方式加載js,css,img等文件
[_webView loadHTMLString:htmlCont baseURL:baseURL];

要注意的是:所有在應(yīng)用內(nèi)的資源文件都是在baseURL的根目錄也就是此代碼中的bundlePath的根目錄俩块,所以圖片資源,不管在項(xiàng)目里面放在哪個(gè)目錄結(jié)構(gòu)下浓领,在HTML內(nèi)引用的時(shí)候玉凯,都是直接根目錄的。
加載css和image 的時(shí)候baseURL不能為nill

這里我簡單說一下
baseURL到底是什么東西联贩?對此漫仆,我也很好奇,所以我NSLog了代碼里面的baseURL泪幌,然后得到的結(jié)果是:file:///Users/(用戶名)/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/(一些大寫字母加連字符加數(shù)字的序列號)/(應(yīng)用名).app/ 盲厌。然后我在終端里面找到這個(gè)目錄署照,打開一看,發(fā)現(xiàn)都是一些HTML吗浩,image建芙,txt等靜態(tài)資源。

至此懂扼,在webView中插入本地image資源的功能已經(jīng)實(shí)現(xiàn)了禁荸,下面是更有挑戰(zhàn)性的功能:添加js文件

添加本地js文件到webView中

添加js文件

這個(gè)實(shí)現(xiàn)說起來其實(shí)很簡單,因?yàn)椴恍枰魏未a層面上的修改阀湿,只需要按上面添加image的方式赶熟,在script的src里面直接寫js的文件名即可。

但是如果直接這樣寫陷嘴,你就會發(fā)現(xiàn)js資源根本沒有被加載映砖。到底image和js有什么區(qū)別?看上面的圖片灾挨,可以看到默認(rèn)在bundlePath里面是沒有我引入到工程里面的jquery.js和scrollLoading.js的啊央。那么,這個(gè)是不是導(dǎo)致js資源沒有被正確加載的原因涨醋?
在這篇文章:How to load a local .CSS file & JavaScript resources using iPhone UIWebView Class和這篇文章iPhone基于lightbox的圖片放大特效和網(wǎng)頁布局中,都提及到一個(gè)

Select .js file and in the “Detail” view unselect the bullseye column indicating it is compiled code

In the “Groups & files” view expand the “Targets” tree and expand the application then go to “Copy Bundle Resources” and drag the *.js files into it.

方法是有了逝撬,可是這種英文的描述浴骂,還沒有附加圖片,實(shí)在是讓人看不懂宪潮,大致知道的就是:js文件在xcode里面溯警,默認(rèn)是一種需要被編譯的文件,這就導(dǎo)致它不會被放到我們剛剛放到的BundlePath(更專業(yè)的名稱應(yīng)該是Bundle Resources)里狡相。

所以要解決的問題是梯轻,怎樣才能使得js文件不被編譯并且放到Bundle Resources中。

期間為了理解上面那兩句英文而Google的經(jīng)歷就不說了尽棕,直接說結(jié)果吧喳挑。

在xcode里面,每個(gè)project都有至少一個(gè)Targets(多個(gè)的也有滔悉,但是我不懂)伊诵,在Targets里面(打開Targets的方式是在左側(cè)欄,點(diǎn)擊project回官,在中間的內(nèi)容區(qū)曹宴,就會出現(xiàn)project喝Targets),存放了一些資源文件歉提,在Build Phases下可以看到笛坦,跟本次內(nèi)容關(guān)聯(lián)最大的有兩項(xiàng):Compile Sources和Copy Bundle Resources区转。在沒修改的情況下,展開Compile Sources就能看到找了很久的jquery.js和scrollLoading.js

e2804a7f745cc38bf3b4e5e1eae08845.png
fcba8fcb77ff990394dfcd106a530e3b.png

Compile Sources后能看到兩個(gè)js文件
接下來要做的很簡單版扩,從Compile Sources中刪除兩個(gè)js文件废离,再在Copy Bundle Resources中添加這兩個(gè)文件,一切搞定资厉。想來(偷懶厅缺,不想Google繼續(xù)深入了解了),Compile Sources是放置那些需要被編譯的文件宴偿,.h,.m和冤枉的.js文件等等湘捎,而Copy Bundle Resources里面放的是一些資源文件,在程序在運(yùn)行時(shí)會引入的窄刘,同時(shí)在項(xiàng)目打包之后也依舊存在的文件窥妇。

其他格式的資源文件,在添加的時(shí)候也大致就是這個(gè)流程娩践,不重復(fù)說了活翩。
參考鏈接 http://www.th7.cn/web/html-css/201412/70846.shtml

2.iOS中用UIWebView的loadHTMLString后圖片和文字失調(diào)解決方法

iOS中用UIWebView的loadHTMLString后圖片和文字失調(diào),圖片過大翻伺,超過屏幕材泄,文字太小吨岭;或者圖片太小拉宗,文字太大,總之就是不協(xié)調(diào)辣辫。我們的需求是讓圖片的大小跟著屏幕的變化而變化旦事,就是動(dòng)態(tài)的去適應(yīng)屏幕;那么文字的字體就是我們自己可以控制急灭,可大可小姐浮。要想達(dá)到這樣的效果,我們要在用loadHTMLString加載字符串之前對它進(jìn)行處理葬馋。怎么處理呢卖鲤?什么原理呢?

NSString *htmls = [NSString stringWithFormat:@"<html> \n"
                           "<head> \n"
                           "<style type=\"text/css\"> \n"
                           "body {font-size:15px;}\n"
                           "</style> \n"
                           "</head> \n"
                           "<body>"
                           "<script type='text/javascript'>"
                           "window.onload = function(){\n"
                           "var $img = document.getElementsByTagName('img');\n"
                           "for(var p in  $img){\n"
                              " $img[p].style.width = '100%%';\n"
                               "$img[p].style.height ='auto'\n"
                           "}\n"
                           "}"
                           "</script>%@"
                           "</body>"
                           "</html>",htmlString];

原理就是用一個(gè)for循環(huán)点楼,拿到所有的圖片扫尖,對每個(gè)圖片都處理一次,讓圖片的寬為100%掠廓,就是按照屏幕寬度自適應(yīng)换怖;讓圖片的高atuo,自動(dòng)適應(yīng)蟀瞧。文字的字體大小沉颂,可以去改font-size:15px条摸,這里我用的是15px。根據(jù)自己的具體需求去改吧铸屉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钉蒲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彻坛,更是在濱河造成了極大的恐慌顷啼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昌屉,死亡現(xiàn)場離奇詭異钙蒙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)间驮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門躬厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竞帽,你說我怎么就攤上這事扛施。” “怎么了屹篓?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵疙渣,是天一觀的道長。 經(jīng)常有香客問我堆巧,道長昌阿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任恳邀,我火速辦了婚禮,結(jié)果婚禮上灶轰,老公的妹妹穿的比我還像新娘谣沸。我一直安慰自己,他們只是感情好笋颤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布乳附。 她就那樣靜靜地躺著,像睡著了一般伴澄。 火紅的嫁衣襯著肌膚如雪赋除。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天非凌,我揣著相機(jī)與錄音举农,去河邊找鬼。 笑死敞嗡,一個(gè)胖子當(dāng)著我的面吹牛颁糟,可吹牛的內(nèi)容都是我干的航背。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼棱貌,長吁一口氣:“原來是場噩夢啊……” “哼玖媚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起婚脱,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤今魔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后障贸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體错森,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年惹想,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了问词。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘀粱,死狀恐怖激挪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锋叨,我是刑警寧澤垄分,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站娃磺,受9級特大地震影響薄湿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偷卧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一豺瘤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧听诸,春花似錦坐求、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仔蝌,卻和暖如春泛领,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敛惊。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工渊鞋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓篓像,卻偏偏與公主長得像动知,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子员辩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,516評論 25 707
  • UIWebView加載本地HTML5文件一.準(zhǔn)備HTML文件及其資源文件使用UIWebView加載本地的HTML文...
    wzf_taker閱讀 1,147評論 0 3
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā)盒粮,例如說新浪微博、微信等奠滑,這些應(yīng)用本身可...
    lichengjin閱讀 3,641評論 2 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理丹皱,服務(wù)發(fā)現(xiàn),斷路器宋税,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 明明是在大逃亡啊乏屯!你怎么還能寫出如此的調(diào)皮話案薄!看這本書總?cè)滩蛔∠雽σ鳞啻蠛俺皆危蟛艜庾R到蛤迎,自己到底在做些什么啊...
    胡桃夾子怪閱讀 1,305評論 0 0