1. 程式人生 > >xcode,在webView中引入本地html,image,js,css檔案的方法

xcode,在webView中引入本地html,image,js,css檔案的方法

專案需求

最近開發的專案,需要一個webView,同時這個webView會需要引入一些專案中的資源:

  • 一個本地的html檔案,作為webView的模板
  • 兩張loading圖片,在圖片未載入的時候進行佔位
  • jquery.js,scrollLoading.js 也是本地的,實現滾動載入圖片功能

然後就開始了漫長的Google歷程。

在webView中引入本地的html檔案

這裡最主要的一個webView的方法是:loadHTMLString:baseURL: 把HTML檔案的內容以字串的形式載入到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];

通過上述方法,很方便的就能把一個HTML檔案載入到webView中,很簡單吧,接下來,來點進階功能!

在webView中引入本地的image檔案

這個功能的實現是承接上面那個方法的進一步擴充套件,最關鍵的是那個baseURL。先看實現程式碼:

// 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];
    
// 獲取當前應用的根目錄
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
    
// 通過baseURL的方式載入的HTML
// 可以在HTML內通過相對目錄的方式載入js,css,img等檔案
[_webView loadHTMLString:htmlCont baseURL:baseURL];


在object-c裡面通過如上面的方式載入HTML檔案,指定了baseURL的值為程式的bundlePath,然後在HTML檔案裡面就可以自由的通過直接書寫標籤的方式載入圖片圖片檔案了

<img src="loading.png" />;

要注意的是:所有在應用內的資原始檔都是在baseURL的根目錄也就是此程式碼中的bundlePath的根目錄,所以圖片資源,不管在專案裡面放在哪個目錄結構下,在HTML內引用的時候,都是直接根目錄的。

baseURL到底是什麼東西?對此,我也很好奇,所以我NSLog了程式碼裡面的baseURL,然後得到的結果是:file:///Users/(使用者名稱)/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/(一些大寫字母加連字元加數字的序列號)/(應用名).app/ 。然後我在終端裡面找到這個目錄,開啟一看,發現都是一些HTML,image,txt等靜態資源。

bundlePath和其中的內容展示

至此,在webView中插入本地image資源的功能已經實現了,下面是更有挑戰性的功能:新增js檔案

新增本地js檔案到webView中

這個實現說起來其實很簡單,因為不需要任何程式碼層面上的修改,只需要按上面新增image的方式,在script的src裡面直接寫js的檔名即可。

但是如果直接這樣寫,你就會發現js資源根本沒有被載入。到底image和js有什麼區別?看上面的圖片,可以看到預設在bundlePath裡面是沒有我引入到工程裡面的jquery.js和scrollLoading.js的。那麼,這個是不是導致js資源沒有被正確載入的原因?

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.

方法是有了,可是這種英文的描述,還沒有附加圖片,實在是讓人看不懂,大致知道的就是:js檔案在xcode裡面,預設是一種需要被編譯的檔案,這就導致它不會被放到我們剛剛放到的BundlePath(更專業的名稱應該是Bundle Resources)裡

所以要解決的問題是,怎樣才能使得js檔案不被編譯並且放到Bundle Resources中。

期間為了理解上面那兩句英文而Google的經歷就不說了,直接說結果吧。

在xcode裡面,每個project都有至少一個Targets(多個的也有,但是我不懂),在Targets裡面(開啟Targets的方式是在左側欄,點選project,在中間的內容區,就會出現project和Targets),存放了一些資原始檔

Build Phases下可以看到,跟本次內容關聯最大的有兩項:Compile SourcesCopy Bundle Resources

在沒修改的情況下,展開Compile Sources就能看到找了很久的jquery.js和scrollLoading.js

開啟Targets(基於xcode5的介面)
開啟Targets(基於xcode5的介面)

展開Compile Sources後能看到兩個js檔案
展開Compile Sources後能看到兩個js檔案

接下來要做的很簡單,從Compile Sources中刪除兩個js檔案,再在Copy Bundle Resources中新增這兩個檔案,一切搞定。

想來(偷懶,不想Google繼續深入瞭解了),Compile Sources是放置那些需要被編譯的檔案,.h,.m和冤枉的.js檔案等等,而Copy Bundle Resources裡面放的是一些資原始檔,在程式在執行時會引入的,同時在專案打包之後也依舊存在的檔案。

其他格式的資原始檔,在新增的時候也大致就是這個流程,不重複說了。

說完了,就這麼多了,也歡迎補充一些我說的不全面或者遺漏的地方,畢竟我還是個新手

相關推薦

xcode,在webView引入本地html,image,js,css檔案方法

專案需求 最近開發的專案,需要一個webView,同時這個webView會需要引入一些專案中的資源: 一個本地的html檔案,作為webView的模板兩張loading圖片,在圖片未載入的時候進行佔位jquery.js,scrollLoading.js 也是本地的,實現滾動載入圖片功能然後就開始了漫長的Go

iOS webView載入本地html 呼叫 js,css (基本使用)

首先載入本地的html檔案: NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; NSString *path = [[NSBundle mainBund

【jsp】怎麽在jsp文件引入靜態文件(.js .css)

目的 文件路徑 相對 獲得 .cn -1 引入 span 方式 如果在jsp文件中引入靜態文件比如(.js或.css等等),可以在使用 /項目名稱/路徑 的方式,但是這種方式如果在修改了項目了名稱後就顯得比較麻煩了。除了之外還許多方式,比如相對路徑等等。一般情況下,可以先獲

React 引入本地圖片和背景圖片的方法

1、在webpack.config中找到相應的圖片路徑的縮寫配置(不是所有的專案都有縮寫配置的,在大型專案中為了書寫方便進行縮寫配置) 所以我的圖片都在縮寫路徑 Image

webview巢狀html實現精準定位(百度地圖、高德地圖、騰訊地圖、H5原生定位)js對比

最近在實現一個功能,就是在安卓手機和蘋果手機嵌入html程式碼,實現精準定位,我為此對比幾種定位的方法。我要的是精準定位,就是誤差在100米左右的功能,類似與外賣app那種定位精確度 1. 首先是原生h5定位 if(browser.versions.an

Android WebView使用全面解析(載入網路資源、本地HTMLJS互動)

簡述:    WebView是什麼?有什麼用途?我們先來看一下官方介紹:      A View that displays web pages. This class is the basis upon which you can roll your own web b

android webview如何實現html與手機本地資料的互動

在webview開發中,往往不止簡單的載入一個頁面顯示那麼簡單,常常有將手機本地的資料放到html上顯示和將html上操作的資料儲存到手機本地的情況,那麼如何實現這種資料互動呢: 一:webvie部份: final String json="{title

在php模版檔案html檔案引入js,css檔案錯誤解決

1,html檔案引入js一些資原始檔時候:可以寫相對路徑來引入,<script src="../lib/layer/layer.js"></script>     <script  src="../lib/jquer.min.js">&l

jsp.html引入js.css檔案的問題,以及檔案路徑詳解。

首先我把檔案的位置已截圖的形式發出(eclipse工作欄), 看清楚各個檔案路徑的位置。 </pre>其中test1.css中寫了一個測試程式碼:</p><p><pre name="code" class="html">.AA

Springboot引入本地jar包,並通過maven把專案打成可執行jar包

       最近把以往的老專案用SpringBoot進行了重構,老專案中有部分本地依賴包不是放在maven庫裡的,是本地開發直接引入,需要在mvn package的時候把本地依賴jar也打進可執行包中。 這種通用問題,在網上找了一圈卻沒發現什麼好的解決辦

gulp-html-import,在html引入外部html檔案

寫於 2016.06.14 專案地址: gulp-html-import 曾經學習PHP的時候,深深覺得include語法非常好用,後接觸了ejs,發現裡面也有類似的語法,能夠方便地引入公共html檔案;在學習了vue,react等框架以後,“元件化思想”更是在我腦海根深蒂固,再也無

vue引入本地swf檔案時出現的路徑錯誤問題

    這幾天改一個老的政府專案。裡面用到了flash動畫,這個之前沒有接觸過,以為路徑就和普通的圖片引入一樣。 就這樣寫了: 但是這樣發現一個問題,就是在頁面上確實會顯示讓你啟用flash控制元件,但是點開後會發現一片空白。 一開始我以為是swf檔案的問題,但是在一個簡單的

Spring boot引入本地的jar包

很多情況下,一些jar包在maven上面那是沒有對應的引用依賴。所以只能引用本地的jar檔案。但是這種情況下不能直接引用,新增到referenceLibrary中的, 1,需要在專案的目錄下新增libs目錄. 2,在pom檔案中新增如下配置,來讓maven知道這個ja

使用WKWebView的一個問題:iOS使用本地html的一個大坑

為了測試WKWebView中JS和native程式碼的互動功能,所以本地寫了簡單的HTML程式碼 就是響應一個button的點選事件,和WKWebView互動, 正確寫法如下: 在實際過程中,由於

WKWebView和UIWebView載入本地htmlJS互動各種坑解決辦法

因為蘋果的檔案機制,所有的資原始檔都相當於放在bundle的路徑裡,裡面不分任何資料夾路徑,所以我們在載入(js, css, png)等等的資原始檔的時候,不應該加上任何檔名,所以最好是把所有有關html的檔案都放在同一平級的資料夾 UIWebView 1.OC調JS

ios的webview引入h5的方法

1、 拖入webview控制元件,實現標頭檔案的控制元件的宣告 2、 在實現檔案內進行內容的載入 1)、載入網路html檔案 在viewDidLoad()這個初始化檔案上寫入 NSString *url=[NSStringstringWithFormat:@”http://

Android WebView無法載入本地html檔案的解決方法

LogCat報錯如下:"XMLHttpRequest cannot load file:///sdcard/xxx/index.html. No 'Access-Control-Allow-Origin' header is present on the requested

Android studio 本地 html 頁面互動

  在Android studio的工程裡的main目錄下建立一個 assets目錄與res同級如下圖:在assets目下考入寫好的html頁面,webview通過“file:///android_assets/xxxx.html”載入此檔案。_webView.loadUrl

iOS 載入本地htmljscss方法

如何載入已經寫好的靜態頁面呢?可以通過下面幾個步驟解決: 1、將檔案拷貝到專案中 2、將其拉入專案,注意選擇Create folder references 然後可以看到在專案中,其顯示的為藍

ios UIWebView 載入本地html,js,css檔案的問題

iOS 開發有時候我們會用UIWebView載入本地html,js,css 檔案,載入的方法: NSString *filePath = [[NSBundle mainBundle]pathForResource:@"index" ofType:@"ht