如何在 WebView Cocoa / Mac OS 上加载带有图像、js 和 css 的本地 html 文件
Posted
技术标签:
【中文标题】如何在 WebView Cocoa / Mac OS 上加载带有图像、js 和 css 的本地 html 文件【英文标题】:How to load local html files with images, js and css on WebView Cocoa / Mac OS 【发布时间】:2011-07-26 16:02:19 【问题描述】:我有代码可以在 ios 上完成这项工作。使用我在这里和网上找到的任何东西,我设法找到了制作 Cocoa Mac Os 版本的地方,但图像无法加载。 CSS 和 javascript 似乎也没有加载。 html 的目录被添加到 Resources 组,但它被添加为文件夹引用(蓝色文件夹),这使得 Xcode 尊重 HTML 应用程序的目录结构。
这是我尝试使用的代码:
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:@"/Patient_eMMR_HTML5" ];
NSString *html = [NSString stringWithContentsOfFile:htmlPath
encoding:NSUTF8StringEncoding
error:nil];
[[webView mainFrame] loadHTMLString:html baseURL:[NSURL fileURLWithPath:
[NSString stringWithFormat:@"%@/Patient_eMMR_HTML5/",
[[NSBundle mainBundle] bundlePath]]]];
这是我基于上面使用的代码的 iOS 版本代码:
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:@"/Patient_eMMR_HTML5" ];
NSString *html = [NSString stringWithContentsOfFile:htmlPath
encoding:NSUTF8StringEncoding
error:nil];
[webView loadHTMLString:html
baseURL:[NSURL fileURLWithPath:
[NSString stringWithFormat:@"%@/Patient_eMMR_HTML5/",
[[NSBundle mainBundle] bundlePath]]]];
非常感谢任何帮助。谢谢。
【问题讨论】:
【参考方案1】:如果您通过NSURLRequest
而不是作为字符串加载 HTML,则无需处理基本 URL:
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:@"Patient_eMMR_HTML5"];
NSURL* fileURL = [NSURL fileURLWithPath:filePath];
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL];
[[webView mainFrame] loadRequest:request];
请注意,您应该只在‑pathForResource:…
方法中指定目录名称,不要使用正斜杠作为前缀。假定命名目录植根于主包的目录。
请注意,UIWebView
也有一个 ‑loadRequest:
方法,因此您可以在 iOS 上使用几乎相同的代码。
【讨论】:
非常感谢 Rob,它成功了。我仍然遇到 Canvas 不绘图的问题。我现在不打算使用这种方法,因为我们无法重新测试所有内容,所以现在我正在做一个打开 Safari 的愚蠢链接,但我确实想学习这一点。再次感谢。 就 Canvas 而言,您确定为 WebView 启用了 JavaScript 吗? 好吧,我没有启用或禁用任何东西。代码正是你在那里给我的。尽管如此,许多通过 Javascript 触发的东西仍然有效。只是 Canvas 似乎失败了。我什至有一些以编程方式创建并且正在运行的 CSS 动画。我会搜索这个。fileURLWithPath:
正是我需要的 - URLWithString:
没有返回我想要的。【参考方案2】:
这对我在 Mac OSX 上的 resourceURL 有效
[webView loadHTMLString:htmlContent baseURL:[[NSBundle mainBundle] resourceURL]]
【讨论】:
正是我需要的,谢谢!它在 Swift 4 中:webView.mainFrame.loadHTMLString(html, baseURL: Bundle.main.resourceURL!)
【参考方案3】:
mserin,这个问题是针对 Mac Os X 的 Cocoa 框架。您正在使用 UIWebView,它是 Cocoa Touch 的 UIKit 的一部分。如果你想为 iPhone / iPad 构建这个,你 should look at this post.
如果您尝试在 Mac 上执行此操作,请使用我们在此处使用的代码,但您需要包含这样的 WebKit 框架:
#import <WebKit/WebKit.h>
然后继承 WebView,而不是 UIWebView:
WebView *webView;
具有这样的属性:
@property (nonatomic, retain) IBOutlet WebView *webView;
【讨论】:
以上是关于如何在 WebView Cocoa / Mac OS 上加载带有图像、js 和 css 的本地 html 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cocoa MacOS Webview 中显示简单的文本消息(toasts/alerts)?
如何使用 Cocoa (Mac) 在 Swift 中创建 PDF
如何使用 Cocoa 和 CGDisplayCreateImageForRect 在 Mac OS X 中截取区域截图?