如何加载本地HTML文件到UIWebView

我试图加载一个HTML文件到我的UIWebView,但它不会工作。 这是阶段:我的项目中有一个名为html_files的文件夹。 然后,我在界面构build器中创build了一个webView,并在viewController中为它分配了一个插口。 这是我用来追加HTML文件的代码:

-(void)viewDidLoad { NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"]; NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile]; [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]]; [super viewDidLoad]; } 

这将无法正常工作,UIWebView是空白的。 我会感谢一些帮助。

可能最好使用NSString并加载html文档,如下所示:

Objective-C的

 NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"]; NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; [webView loadHTMLString:htmlString baseURL: [[NSBundle mainBundle] bundleURL]]; 

迅速

 let htmlFile = NSBundle.mainBundle().pathForResource("fileName", ofType: "html") let html = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding) webView.loadHTMLString(html!, baseURL: nil) 

Swift 3几乎没有变化:

 let htmlFile = Bundle.main.path(forResource: "intro", ofType: "html") let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8) webView.loadHTMLString(html!, baseURL: nil) 

你试过了吗?

还要检查资源是否被pathForResource:ofType:inDirectory调用find。

编辑2016-05-27loadRequest公开“一个通用的跨站点脚本漏洞”。 确保您拥有您加载的每一项资产。 如果你加载一个错误的脚本,它可以加载任何想要的东西。

如果你需要相对的链接在本地工作,使用这个:

 NSURL *url = [[NSBundle mainBundle] URLForResource:@"my" withExtension:@"html"]; [webView loadRequest:[NSURLRequest requestWithURL:url]]; 

该包将search项目的所有子目录以查找my.html 。 (目录结构在构build时变得平坦)

如果my.html有标签<img src="some.png"> ,webView会从你的项目中加载some.png

通过这个你可以加载你的项目资产(捆绑)到webView的HTML文件。

  UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; [web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]]; 

可能这对你有用。

我想你需要allocate和初始化您的webview首先::

 - (void)viewDidLoad { NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"]; NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile]; webView = [[UIWebView alloc] init]; [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]]; [super viewDidLoad]; } 

一个简单的复制粘贴代码片段:

 -(void)LoadLocalHtmlFile:(NSString *)fileName onWebVu:(UIWebView*)webVu { [webVu loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:fileName ofType:@"html"]isDirectory:NO]]]; } 

注意:

确保HTML文件的目标成员资格被检查,否则下面的exception将被抛出: –

在这里输入图像描述

由于未捕获的exception而终止应用程序

'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'

 UIWebView *web=[[UIWebView alloc]initWithFrame:self.view.frame]; //[self.view addSubview:web]; NSString *filePath=[[NSBundle mainBundle]pathForResource:@"browser_demo" ofType:@"html" inDirectory:nil]; [web loadRequest:[NSURLRequest requestWhttp://stackoverflow.com/review/first-postsithURL:[NSURL fileURLWithPath:filePath]]]; 

可能是您的HTML文件不支持UTF-8编码,因为相同的代码正在为我工​​作。

或者你也可以这些代码行:

 NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"Notes For Apple" ofType:@"htm" inDirectory:nil]; NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; [WebView loadHTMLString:htmlString baseURL:nil]; 

这里的方式与JQuery的HTML文件的工作。

  _webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)]; [self.view addSubview:_webview]; NSString *filePath=[[NSBundle mainBundle]pathForResource:@"jquery" ofType:@"html" inDirectory:nil]; NSLog(@"%@",filePath); NSString *htmlstring=[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; [_webview loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]]; or [_webview loadHTMLString:htmlstring baseURL:nil]; 

您可以使用这些请求来调用UIWebview中的HTML文件

确保“html_files”是应用程序主包中的一个目录,而不仅仅是Xcode中的一个组。

一个新的方法来做到这一点使用迅速。 UIWebView不再,WKWebView是加载网页的新类,它确保了Safari浏览器的function。

  import WebKit let preferences = WKPreferences() preferences.javaScriptCanOpenWindowsAutomatically = false let configuration = WKWebViewConfiguration() configuration.preferences = preferences let webView = WKWebView(frame: self.view.bounds, configuration: configuration) let request = NSURLRequest(URL: NSURL(string: "http://nshipster.com")) webView.loadRequest(request) 
 Swift iOS: // get server url from the plist directory var htmlFile = NSBundle.mainBundle().pathForResource("animation_bg", ofType: "html")! var htmlString = NSString(contentsOfFile: htmlFile, encoding: NSUTF8StringEncoding, error: nil) self.webView.loadHTMLString(htmlString, baseURL: nil) 
 [[NSBundle mainBundle] pathForResource:@"marqueeMusic" ofType:@"html"]; 

可能会迟到,但如果pathForResource的文件nil ,则应将其添加到“ Build Phases > Copy Bundle Resources

在这里输入图像描述

对于Swift 3和Swift 4:

 let htmlFile = Bundle.main.path(forResource: "name_resource", ofType: "html") let html = try! String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8) self.webView.loadHTMLString(html, baseURL: nil) 

这里是Swift 3:

  if let htmlFile = Bundle.main.path(forResource: "aa", ofType: "html"){ do{ let htmlString = try NSString(contentsOfFile: htmlFile, encoding:String.Encoding.utf8.rawValue ) messageWebView.loadHTMLString(htmlString as String, baseURL: nil) } catch _ { } } 
 if let htmlFile = NSBundle.mainBundle().pathForResource("aa", ofType: "html"){ do{ let htmlString = try NSString(contentsOfFile: htmlFile, encoding:NSUTF8StringEncoding ) webView.loadHTMLString(htmlString as String, baseURL: nil) } catch _ { } } 

在Swift 2.0中,@ user478681的答案可能如下所示:

  let HTMLDocumentPath = NSBundle.mainBundle().pathForResource("index", ofType: "html") let HTMLString: NSString? do { HTMLString = try NSString(contentsOfFile: HTMLDocumentPath!, encoding: NSUTF8StringEncoding) } catch { HTMLString = nil } myWebView.loadHTMLString(HTMLString as! String, baseURL: nil) 

把所有的文件(HTML和资源)放在一个目录(我的“手册”)。 接下来,通过“支持文件”将目录拖放到XCode。 您应该检查选项“如果需要复制项目”和“创build文件夹引用”。 接下来,写一个简单的代码:

 NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"]; [myWebView loadRequest:[NSURLRequest requestWithURL:url]]; 

注意@"manual/index"手册是我目录的名字!! 这都是! 对不起,我的英语不好…

================================================== =====================

Hola desde哥斯达黎加。 Ponga los archivos(在线文档),luego,arrastre y suelte和XCode,sobre“支持文件”。 Usted debe seleccionar las opciones“如果需要复制项目”y“创build文件夹参考”。

 NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"]; [myWebView loadRequest:[NSURLRequest requestWithURL:url]]; 

Prestaatencióna @"manual/index"手册 es el nombre de mi directorio !!