Как загрузить локальный html файл в UIWebView
Я пытаюсь загрузить html файл в свой UIWebView, но он не будет работать. Здесь сцена: у меня есть папка html_files в моем проекте. Затем я создал 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 пуст. Я был бы признателен за помощь.
Ответы
Ответ 1
возможно, лучше использовать 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]];
Swift
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
.
Ответ 2
EDIT 2016-05-27 - loadRequest
раскрывает "универсальную уязвимость для сценариев межсайтового скриптинга" . Убедитесь, что вы владеете каждым один актив, который вы загружаете. Если вы загружаете плохой script, он может загружать все, что захочет.
Если вам нужны относительные ссылки для работы локально, используйте это:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"my" withExtension:@"html"];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
Пакет будет искать все подкаталоги проекта, чтобы найти my.html
. (структура каталога сглаживается во время сборки)
Если my.html
имеет тег <img src="some.png">
, webView загрузит some.png
из вашего проекта.
Ответ 3
этим вы можете загрузить html файл, который находится в вашем проекте Assets (bundle) в webView.
UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];
может быть это полезно для вас.
Ответ 4
Я думаю, вам нужно allocate
и начать свой webview
first::
- (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];
}
Ответ 5
Простой фрагмент кода вставки кода:
-(void)LoadLocalHtmlFile:(NSString *)fileName onWebVu:(UIWebView*)webVu
{
[webVu loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:fileName ofType:@"html"]isDirectory:NO]]];
}
Примечание:
Убедитесь, что выбранное целевое членство в файле html указано в противном случае, после исключения будет выбрано: -
![enter image description here]()
Завершение приложения из-за неперехваченного исключения
'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
Ответ 6
Для 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)
Ответ 7
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]]];
Ответ 8
Может быть, ваш 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];
Ответ 9
Вот как работает HTML файл с JQuery.
_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];
Вы можете использовать либо запросы для вызова HTML файла в вашем UIWebview
Ответ 10
Убедитесь, что "html_files" - это каталог в главном комплекте приложения, а не только группа в Xcode.
Ответ 11
Новый способ сделать это с помощью swift. UIWebView больше не существует, и WKWebView - это новый класс для загрузки веб-страниц, который обеспечивает функции Safari для веб-представления.
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)
Ответ 12
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)
Ответ 13
[[NSBundle mainBundle] pathForResource:@"marqueeMusic" ofType:@"html"];
Возможно, это будет поздно, но если файл из pathForResource
равен nil
, вы должны добавить его в Build Phases > Copy Bundle Resources
.
![введите описание изображения здесь]()
Ответ 14
Здесь 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 _ {
}
}
Ответ 15
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 _ {
}
}
Ответ 16
В 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)
Ответ 17
Поместите все файлы (html и ресурсы) в каталог (для моего "руководства" ). Затем перетащите каталог в XCode через "Поддержка файлов". Вы должны проверить параметры "Копировать элементы, если необходимо" и "Создать ссылки на папки". Затем напишите простой код:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];
Внимание к @"manual/index"
, ручному - это имя моего каталога!!
Все это!!!! Извините за мой плохой английский...
=============================================== ========================
Гола от Коста-Рики. Ponga los archivos (html y demás recursos) en un directorio (en mi caso lo llamé manual), luego, arrastre y suelte en XCode, sobre "Поддержка файлов". Usted debe seleccionar las opciones "Скопируйте элементы при необходимости" y "Создать ссылки на папки".
NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];
Presta atención a @"manual/index"
, руководство es el nombre de mi directorio!!
Ответ 18
Этот пример показывает, как мы можем использовать HTML
в UIWebView
func someFunction() {
uiWebView.loadHTMLString("<html><body></body></html>", baseURL: nil)
uiWebView.delegate = self as? UIWebViewDelegate
}
func webViewDidFinishLoad(_ webView: UIWebView) {
//ready to be processed
}
Не забудьте расширить класс из UIWebViewDelegate
и обнулить делегат
получить HTML из UIWebView
получить HTML из WKWebView
положить HTML в WKWebView