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

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

2014-12-08 20:00:16CSDN-sky_2016-点击数:10292

项目需求

最近开发的项目,需要一个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 webViewNSString * 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文件

这个功能的实现,很大程度上是借鉴了这篇文章:UIWebView – Loading External Images and CSS。大家可以去看看这篇文章,或者看我下面的继续描述。

这个功能的实现是承接上面那个方法的进一步扩展,最关键的是那个baseURL。先看实现代码:

// get the model which is a html file for the webViewNSString * 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资源没有被正确加载的原因?

在这篇文章:How to load a local .CSS file & JavaScript resources using iPhone UIWebView Class和这篇文章iPhone基于lightbox的图片放大特效和网页布局中,都提及到一个

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 Sources和Copy Bundle Resources。在没修改的情况下,展开Compile Sources就能看到找了很久的jquery.js和scrollLoading.js

打开Targets(基于xcode5的界面)展开Compile Sources后能看到两个js文件

接下来要做的很简单,从Compile Sources中删除两个js文件,再在Copy Bundle Resources中添加这两个文件,一切搞定。想来(偷懒,不想Google继续深入了解了),Compile Sources是放置那些需要被编译的文件,.h,.m和冤枉的.js文件等等,而Copy Bundle Resources里面放的是一些资源文件,在程序在运行时会引入的,同时在项目打包之后也依旧存在的文件。

其他格式的资源文件,在添加的时候也大致就是这个流程,不重复说了。

时间: 2024-10-12 08:30:31

iOS之在webView中引入本地html,image,js,css文件的方法 - sky//////////////////////////////////////ZZZZZZZZZZZZZZZ的相关文章

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

http://www.shuizhongyueming.com/2014/01/load-local-image-js-css-file-to-webview-in-xcode/ xcode,在webView中引入本地html,image,js,css文件的方法

页面中引入带中文的JS文件乱码问题

1. WebConfig: ? 1 <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312"/> 2.<META http-equiv="content-type" content="text/html; charset=gb2312"> 3.<script t

ssm 整合中js,css 文件无法引入

问题:ssm 整合中第三方 js,css 文件无法引入 检查:ssm 整合配置完好 无拦截器拦截 spring mvc  静态资源已配置 编译时可以直接跳转到js  css 问题发现 js  css 文件放在WEB-INF 下,导致无法引入 解决 js  css 文件放在webapp 下,可以引入 原文地址:https://www.cnblogs.com/jsbk/p/9461374.html

在eclipse中引入mybatis和spring的约束文件

eclipse中引入mybatis约束文件步骤: 首先: confi的key值 http://mybatis.org/dtd/mybatis-3-config.dtd mapper的key值 http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd eclipse中引入mybatis约束文件步骤:             原文地址:https://www.cnblogs.com/rgever/p/9355179.html

web项目中关于引入JS/css文件, 浏览器console出现 net::ERR_ABORTED错误的解决方法

如图错误: 引入js/css后,控制台出现的错误! 我的错误则是因为在静态文件夹下的原因. 解决:如果要放在webRoot下的静态(static)文件夹下,需要在springMvc的配置文件中添加上注解(<mvc:default-servlet-handler/>)和(<context:annotation-config></context:annotation-config>),如果有(<context:component-scan />),则不需要第二条

C#中常用的几种读取XML文件的方法

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具.XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用.微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件. “在程序中访问

Django 模板中引用静态资源(js,css等)

Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1.6/howto/static-files/ 大致步骤是这样的: 1.确保setting.py里的installed_apps中包括了django.contrib.staticfiles,没有的话大家给添上就行. 2.同样是在setting.py里面进行添加,我们需要添加静态资源相关的配置.可以这么写

js/css文件修改后浏览器本地缓存解决

本文实例讲述了让html页面随js的修改来更新缓存的实现方法.分享给大家供大家参考.具体实现方法如下: 很多朋友都会碰到这样的情况:如果我们页面加载了js的话下次打开时也会是调用这个js缓存文件,但对于我们修改后调试和发布是非常的不方便了,本文就来谈论如何解决这一问题,下面一起来看看. 一.后台编写一个 UrlCommon的js/css url的连接操作类 1 using System; 2 using System.Collections.Generic; 3 using System.Lin

iOS 点击WebView中的链接,跳转指定控制器

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { }