OVH Cloud OVH Cloud

cocoa et html root des images

17 réponses
Avatar
une.bevueVOTEZ
j'ai une fenêtre cocoa qui expose une image par le biais du html je
n'arrive pas à voir où il faut placer cette image, si je la met dans
Resources/

et que je met dans le html :
<img src="mon-image.png" />

elle n'est pas présentée...

si je met le path absolu de l'image, rien de mieux...

--
une bévue

7 réponses

1 2
Avatar
une.bevueVOTEZ
Frédéric Testuz wrote:

Je crois que tu génères ton code html sans fichier, pour utiliser une
WebView :

[[myWebView mainFrame] loadHTMLString:myHTMLString baseURL:[NSURL
fileURLWithPath:@"/path/to/base"];


bon, je ne suis pas parvenu, pour l'instant à trouver une info pour
charger une string html plutôt qu'un fichier html.
je ne vois pas comment utiliser "loadHTMLString"...

j'ai essayé :

String theText = "<html><body><h1>Pinot noir</h1></body></html>";
NSSelector selector=new NSSelector("loadHTMLString",new
Class[]{String.class});
NSApplication.sharedApplication().sendActionToTargetFromSender(selector,
browserView,theText);

je me fais injurier quand je launch l'appli :
NSInvalidArgumentException: *** -[WebView loadHTMLString:]: selector not
recognized [self = 0x359840]
at
com.apple.cocoa.application.NSApplication.sendActionToTargetFromSender(N
ative Method)
at MyController.awakeFromNib(MyController.java:16)

Ensuite le rendu est fait en asynchrone, si tu veux savoir quand un
frame a finit de se charger, le frameLoadDelegate de la WebView doit
implémenter :

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame
*)frame

Ca marche facilement si la page n'a qu'un cadre.
ce qui est mon cas, MAIS aussi bien :


didFinishLoadForFrame(Object sender) {}

que :

didFinishLoadingFromDataSource(Object sender) {}

ne donnent rien ???

--
une bévue

Avatar
ftestuz
Une bévue wrote:

Frédéric Testuz wrote:

Je crois que tu génères ton code html sans fichier, pour utiliser une
WebView :

[[myWebView mainFrame] loadHTMLString:myHTMLString baseURL:[NSURL
fileURLWithPath:@"/path/to/base"];


bon, je ne suis pas parvenu, pour l'instant à trouver une info pour
charger une string html plutôt qu'un fichier html.
je ne vois pas comment utiliser "loadHTMLString"...

j'ai essayé :

String theText = "<html><body><h1>Pinot noir</h1></body></html>";
NSSelector selector=new NSSelector("loadHTMLString",new
Class[]{String.class});
NSApplication.sharedApplication().sendActionToTargetFromSender(selector,
browserView,theText);

je me fais injurier quand je launch l'appli :
NSInvalidArgumentException: *** -[WebView loadHTMLString:]: selector not
recognized [self = 0x359840]
at
com.apple.cocoa.application.NSApplication.sendActionToTargetFromSender(N
ative Method)
at MyController.awakeFromNib(MyController.java:16)


D'abord, je n'ai jamais utilisé Java, donc prendre la suite avec
prudence. (Je me suis d'ailleurs mis au C parce que je recommençait la
programmation sur mac et que je me suis dit autant passer directement à
Cocoa.)

La méthode n'est pas loadHTMLString: mais loadHTMLString:baseURL:


Ensuite le rendu est fait en asynchrone, si tu veux savoir quand un
frame a finit de se charger, le frameLoadDelegate de la WebView doit
implémenter :

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame
*)frame

Ca marche facilement si la page n'a qu'un cadre.
ce qui est mon cas, MAIS aussi bien :


didFinishLoadForFrame(Object sender) {}

que :

didFinishLoadingFromDataSource(Object sender) {}

ne donnent rien ???


Tu as défini le frameLoadDelegate (avec setFrameLoadDelegate:) de la
WebView ?

Et enfin, je ne sais pas comment ça marche avec Java, mais WebView n'est
pas défini dans le framework Cocoa, mais WebKit. Dois-tu aussi le
déclarer ?

Je pose la question car d'après les deux lignes de Java que tu as mis,
les appels ont l'air indirectes, ce n'est peut-être pas nécessaire de
faire un include ?

--
Frédéric Testuz


Avatar
ftestuz
Frédéric Testuz wrote:

Une bévue wrote:

Frédéric Testuz wrote:

Je crois que tu génères ton code html sans fichier, pour utiliser une
WebView :

[[myWebView mainFrame] loadHTMLString:myHTMLString baseURL:[NSURL
fileURLWithPath:@"/path/to/base"];


bon, je ne suis pas parvenu, pour l'instant à trouver une info pour
charger une string html plutôt qu'un fichier html.
je ne vois pas comment utiliser "loadHTMLString"...

j'ai essayé :

String theText = "<html><body><h1>Pinot noir</h1></body></html>";
NSSelector selector=new NSSelector("loadHTMLString",new
Class[]{String.class});
NSApplication.sharedApplication().sendActionToTargetFromSender(selector,
browserView,theText);

je me fais injurier quand je launch l'appli :
NSInvalidArgumentException: *** -[WebView loadHTMLString:]: selector not
recognized [self = 0x359840]
at
com.apple.cocoa.application.NSApplication.sendActionToTargetFromSender(N
ative Method)
at MyController.awakeFromNib(MyController.java:16)


D'abord, je n'ai jamais utilisé Java, donc prendre la suite avec
prudence. (Je me suis d'ailleurs mis au C parce que je recommençait la
programmation sur mac et que je me suis dit autant passer directement à
Cocoa.)

La méthode n'est pas loadHTMLString: mais loadHTMLString:baseURL:


Autre chose que je n'avais pas vu, il ne faut pas envoyer ce message à
ta WebView, mais à un WebFrame que tu devrais obtenir par
browserView.mainFrame()

--
Frédéric Testuz



Avatar
une.bevueVOTEZ
Frédéric Testuz wrote:

La méthode n'est pas loadHTMLString: mais loadHTMLString:baseURL:


en fait mon pb là, est que je ne comprend pas la ligne Obj-C que tu m'as
filé, donc je tâtonne...

je pense me mettre aussi à Obj-C ne serait-ce que pour être capable de
traduire ce genre de lignes en java ;-)



[...]>


Tu as défini le frameLoadDelegate (avec setFrameLoadDelegate:) de la
WebView ?


oui, dans IB.

Et enfin, je ne sais pas comment ça marche avec Java, mais WebView n'est
pas défini dans le framework Cocoa, mais WebKit. Dois-tu aussi le
déclarer ?


oui , j'ai ajouté :

#import <WebKit/WebKit.h>
#import <WebKit/WebView.h>

dans main.m

Je pose la question car d'après les deux lignes de Java que tu as mis,
les appels ont l'air indirectes, ce n'est peut-être pas nécessaire de
faire un include ?


sans les deux imports juste au-dessus, il ne se passe rien du tout...

MAIS, je dois dire qu'il me manque sans doute qqc car, dans IB quand je
regarde les attributs de ma WebView je n'ai que "hidden" alors que dans
l'exemple trouvé sur le net il y a des tas d'attributs au sujet des
fonts de javascript et c...

donc dans ma copie de l'exemple (non commenté) j'ai dû oublier qqc que
je ne retrouve pas...
--
une bévue


Avatar
une.bevueVOTEZ
Frédéric Testuz wrote:

Autre chose que je n'avais pas vu, il ne faut pas envoyer ce message à
ta WebView, mais à un WebFrame que tu devrais obtenir par
browserView.mainFrame()


ouais, mais là j'ai deux erreurs à la compil :

MyController.java:15: cannot resolve symbol : method mainFrame ()
MyController.java:15: cannot resolve symbol : class WebFrame

la ligne en question :

WebFrame myWebFrame = browserView.mainFrame();

j'ai donc ajouté dans IB WebFrame.h et dans mon main.m :

#import <WebKit/WebFrame.h>

peut-être devrais-je ajouter cette WebFrame aussi dans IB, comme j'ai
ajouté le "WebViewDelegates" qui comporte dans les "Other Sources" de ce
projet :
WebViewDelegates.h :
/* WebViewDelegates */

#import <Cocoa/Cocoa.h>

@interface WebViewDelegates : NSObject
{
}
@end
et WebViewDelegates.m :
#import "WebViewDelegates.h"
#import <WebKit/WebKit.h>

@implementation WebViewDelegates

- (WebView *)webView:(WebView *)sender
createWebViewWithRequest:(NSURLRequest *)request {

NSLog(@"createWebViewWithRequest");
}

- (NSWindow *)downloadWindowForAuthenticationSheet:(WebDownload *)sender
{

NSLog(@"downloadWindowForAuthenticationSheet");
}


-(void)webView:(WebView *)sender resource:(id)identifier
didFinishLoadingFromDataSource:(WebDataSource *)dataSource {

NSLog(@"didFinishLoadingFromDataSource");
}


@end


bon, il faut savoir qu'Apple se fait tirer les oreilles en ce qui
concerne le bridge cocoa<-->java et plus particulièrement pour le webkit
framework où il n'y a particulièrement rien de fait pour java...

alors que, paraît-il, c'est facile à faire, pour Apple...

--
une bévue

Avatar
ftestuz
Une bévue wrote:

Frédéric Testuz wrote:

La méthode n'est pas loadHTMLString: mais loadHTMLString:baseURL:


en fait mon pb là, est que je ne comprend pas la ligne Obj-C que tu m'as
filé, donc je tâtonne...


Ok, loadHTMLString:baseURL: demande deux arguments, un NSString* (le
code html) et un NSURL* (l'url de la base du document html).

je pense me mettre aussi à Obj-C ne serait-ce que pour être capable de
traduire ce genre de lignes en java ;-)


De toute façon, j'atteins là mes limites :-)

J'ai vu que tu avais aussi posté sur la list cocoa-dev, si jamais il
existe aussi une liste webkitsdk-dev.

--
Frédéric Testuz


Avatar
une.bevueVOTEZ
Frédéric Testuz wrote:

Ok, loadHTMLString:baseURL: demande deux arguments, un NSString* (le
code html) et un NSURL* (l'url de la base du document html).


ah d'accord, pigé, mais bon, le prob est + en amont...

je pense me mettre aussi à Obj-C ne serait-ce que pour être capable de
traduire ce genre de lignes en java ;-)


De toute façon, j'atteins là mes limites :-)

J'ai vu que tu avais aussi posté sur la list cocoa-dev, si jamais il
existe aussi une liste webkitsdk-dev.


oui, merci, j'ai vu, je vais voir s'il s'y dit qqc au niveau java...
--
une bévue


1 2