如何加载本地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-27 – loadRequest
公开“一个通用的跨站点脚本漏洞”。 确保您拥有您加载的每一项资产。 如果你加载一个错误的脚本,它可以加载任何想要的东西。
如果你需要相对的链接在本地工作,使用这个:
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 !!