链接到 WebView 内的资源 - iPhone
题
我的 iPhone 应用程序中有一个 webview,我的 Resources 文件夹中也有一些 html 文件。当我的应用程序加载时,我将资源中的页面加载到我的网络视图中。但是,我需要在我的 webview 中创建指向其他资源(例如图像或其他 html 文件)的链接。仅做相对链接是行不通的:
<a href="OtherPage.html">Doesn't work</a>
解决方案
在加载这些资源,则需要设置的基本URL。可以使用该方法做到这一点:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
...其中,将基本URL是你的资源文件夹中的文件的URL。
其他提示
显然,根据 iPhone OS 3.0 的 iPhone SDK 发行说明:
问题: UIWebView 无法加载针对 3.0 构建的应用程序中的本地资源。
使用时
[UIWebView loadHTMLString:baseURL:]
, ,HTML字符串不应参考带有的本地资源file://
方案。相反,传入NULL
或一个file://
网址为baseURL:
, ,或直接在HTML中包含资源<style>
和<script>
标签。
很公平。但传递一个标准问题 file://
网址为 baseURL
不太管用。然而 ...事实证明,如果你改变 /
到 //
和空间 %20
, ,你将会被设置!(使用 %20
很有道理,但双斜杠部分让我感到惊讶。)
假设你已经拥有了 NSString *markup
设置。这就是你要做的一切。(为了便于阅读,我将代码封装在这里。您可能希望重构/调整以适应口味。)
NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath]
stringByReplacingOccurrencesOfString:@"/" withString:@"//"]
stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
[webView loadHTMLString:markup baseURL:[NSURL URLWithString:
[NSString stringWithFormat:@"file:/%@//", resourcePath]]];
只要您的 CSS、JavaScript 和图像仅通过文件名引用,这应该可以在 iPhone OS 3.0 中实现,其中 loadHTMLString:baseURL:
被关注到!
我固定它:我用这个对等的BaseURL八月表示:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
谢谢!
此代码将返回一个字符串用在束的资源目录中名为“OtherPage.html”文件的URL。
[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]
这为我工作。我的HTML文件是在我的项目的子文件夹(非团体)。我的HTML页被称为页01和子文件夹是HTML:
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *pathToHtml = @"html";
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES];
NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"page01" ofType:@"html"
inDirectory:@"html"]
encoding:NSUTF8StringEncoding error:nil];
[webview loadHTMLString:html baseURL:baseURL];
尝试第一加载OtherPage.html。如果你不能那么它不存在,你已经错过了将它添加到项目中的某些部分。如果可以的话,那么有可能只是在链接一个错字,或可基本URL是不正确的,如8月声明。当我创建了它的图像,是在资源文件的HTML文件,它工作得很好只是用
<img src="file.png">
看看PhoneGap的是怎么做的。 这里是他们的iPhone上的本地资源教程。第11步可能是你忽略了什么。
也许它确实有一些做的baseURL时:当我加载资源,我用这个行:
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
看在端部,它说基本URL:“”。如果我参加了这一点,它不工作(崩溃),但我不知道的路径,我的资源。如果有人确实.....?
有关我的问题是,JS文件没有包括在该束。请务必检查。
好吧,这里3.5年后:)...试着迈克尔*盖洛德的建议上述准确,但它没有工作,在sims为5.0,5.1,6.0,6.1-也没有在实际运行的设备相同。 然而 这因此说明在资源有捆绑( 哪里是建立出去? )帮助使它的工作对我来说是这样的:
- 创建一种搜索文件夹中的项目(迈克尔*表明-而我还没有尝试'集团')
- 把你html文件夹中使用搜索
- 在模式的使用 文件 -> 添加的文件项目
确保项目承认,它应该在的束:
- 右击的主要项目目标在 导航仪 窗口,
- 确保目标是选择, 建造阶段 标签,
- 击 复制捆绑的资源 三角形啄|>
- 和 这里有什么不同迈克尔 -它应该已经显示你html文件和路径。(也许XCoders有所改善的增加文件AI:)
所以我不得不这样做的就是制迈克尔的代码以上 verbatum 并改变这一行:
inDirectory:@"html"]
为:
inDirectory:nil]
和 Shaazam !它的工作:)