170 votes

Comment charger un fichier html local dans UIWebView ?

J'essaie de charger un fichier html dans mon UIWebView mais cela ne fonctionne pas. Voici l'étape : j'ai un dossier appelé html_files dans mon projet. Puis j'ai créé un webView dans interface builder et je lui ai assigné un outlet dans le viewController. Voici le code que j'utilise pour ajouter le fichier 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];
}

Cela ne fonctionne pas et l'UIWebView est vide. J'aimerais avoir de l'aide.

278voto

user478681 Points 4242

Il est probablement préférable d'utiliser NSString et de charger le document html comme suit :

Objectif-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 comporte peu de changements :

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

Avez-vous essayé ?

Vérifiez également que la ressource a été trouvée par pathForResource:ofType:inDirectory appeler.

92voto

Neal Ehardt Points 1259

EDIT 2016-05-27 - loadRequest expose "une vulnérabilité universelle de Cross-Site Scripting". Assurez-vous de posséder chaque actif que vous chargez. Si vous chargez un mauvais script, il peut charger tout ce qu'il veut.

Si vous avez besoin que les liens relatifs fonctionnent localement, utilisez ceci :

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

Le paquet va chercher dans tous les sous-répertoires du projet pour trouver my.html . (la structure du répertoire est aplatie au moment de la construction)

Si my.html a l'étiquette <img src="some.png"> le webView se chargera some.png de votre projet.

40voto

AJPatel Points 2002

Par ce biais, vous pouvez charger le fichier html qui se trouve dans votre projet Assets(bundle) dans le 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]]];

Peut-être que cela vous sera utile.

9voto

Saran Points 2996

Je suppose que vous devez allocate et lancez votre webview d'abord : :

- (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];
}

8voto

HDA Points 2590

Un simple extrait de code à copier-coller :

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

Note :

Assurez-vous que le fichier html Membres ciblés est vérifiée, sinon l'exception suivante sera levée :-

enter image description here

Arrêt de l'application en raison d'une exception non attrapée

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X