J'essaie de charger un fichier HTML dans mon UIWebView mais cela ne fonctionnera pas. Voici la scène: j'ai un dossier appelé html_files dans mon projet. Ensuite, j'ai créé WebView dans le générateur d'interface et lui ai attribué une sortie dans le viewController. C'est 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 fonctionnera pas et UIWebView est vide. J'apprécierais un peu d'aide.
il est probablement préférable d’utiliser NSString et de charger le document HTML comme suit:
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]];
rapide
let htmlFile = NSBundle.mainBundle().pathForResource("fileName", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding)
webView.loadHTMLString(html!, baseURL: nil)
Swift 3 a 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)
As-tu essayé?
Vérifiez également que la ressource a été trouvée par l'appel de pathForResource:ofType:inDirectory
.
EDIT 2016-05-27 - loadRequest
expose "une vulnérabilité universelle liée aux scripts inter-sites." Assurez-vous vous possédez chaque actif que vous chargez. Si vous chargez un mauvais script, il peut charger tout ce qu'il veut.
Si vous avez besoin de liens relatifs pour fonctionner 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 de répertoire est aplatie au moment de la construction)
Si my.html
porte la balise <img src="some.png">
, la WebView chargera some.png
à partir de votre projet.
vous pouvez ainsi charger le fichier HTML qui se trouve dans les actifs de votre projet dans 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 cela vous est utile.
Je suppose que vous devez allocate
et initialiser votre webview
en premier ::
- (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];
}
n extrait de code Copier-Coller simple:
-(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 l’adhésion cible du fichier du fichier html est cochée, sinon l’exception suivante sera levée: -
Fermeture de l'application en raison d'une exception non interceptée
'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
Pour Swift 3 et 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)
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]]];
Peut-être que votre fichier HTML ne prend pas en charge le codage UTF-8, car le même code fonctionne pour moi.
Ou vous pouvez aussi ces lignes de code:
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];
Voici le fonctionnement du fichier HTML avec 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];
Vous pouvez utiliser les demandes pour appeler le fichier HTML dans votre UIWebview.
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)
Assurez-vous que "fichiers_html" est un répertoire dans le bundle principal de votre application, et pas seulement un groupe dans Xcode.
Une nouvelle façon de faire cela en utilisant Swift. UIWebView n'est plus et WKWebView est la nouvelle classe de chargement de pages Web, qui assure les fonctionnalités de Safari à la vue Web.
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)
Voici 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 _ {
}
}
Dans Swift 2.0, la réponse de @ user478681 pourrait ressembler à ceci:
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)
Mettez tous les fichiers (html et ressources) dans un répertoire (pour mon "manuel"). Ensuite, faites glisser le répertoire dans XCode, au-dessus de "Fichiers de support". Cochez les options "Copier les éléments si nécessaire" et "Créer des références de dossier". Ensuite, écrivez un code simple:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];
Attention à @"manual/index"
, manuel est le nom de mon répertoire !! C'est tout !!!! Désolé pour mon mauvais anglais...
=============================================== ======================
Hola du Costa Rica. Cliquez sur le lien suivant (html y demás recursos) pour afficher les instructions du manuel, sélectionnez, gérez et remplacez par XCode, sous la rubrique "Fichiers de support". Vous devez sélectionner les options "Copier les éléments si nécessaire" et "Créer des références de dossier".
NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];
Presta atención a @"manual/index"
, manuel es el nombre de mon directeur !!