Déterminer la taille nécessaire pour une WebView

juin 2005 modifié dans API AppKit #1
Hello,

Voici un petit problème sur lequel je cale (si si): j'aurais besoin de connaà®tre qu'une webview occuperait à  l'écran pour afficher une page donnée, la largeur étant fixée.

J'ai cherché dans la doc. .
  • Première conclusion c'est du côté de la WebFrameView que je dois chercher, la WebView n'étant qu'un container pour les WebFrameView. Cette classe implémente une méthode -documentView, mais cette méthode me revoie nil (la page a été chargée avec loadHTMLString:baseURL: de la classe WebFrame.
  • j'ai essayé de descendre la hiérarchie des vue (avec des subviews), pour essayer de remonter à  une NSScrollView, on finit par arriver à  une WebCoreScrollView. Cette vue n'a pas de documentView (prévisible), et n'a pas de Scrollers non plus, nil étant renvoyé si j'envoie verticalScroller, alors qu'il est affiché à  l'écran (et rien de tel dans les subviews évidemment), donc pas possible d'avoir la taille indirectement par ce biais.


Voilà , si l'un d'entre vous a une idée, ce serait avec plaisir.

A+

Renaud

[EDIT]J'ai oublié de précisé que la WebView est créée par code, avec un classique alloc/initWithFrame.

Réponses

  • ObiObi Membre
    20:29 modifié #2
    J'ai eu le même souci et j'ai trouvé des bouts de code à  droite et à  gauche.
    Comme c'est noyé dans mon code, je peux oublier un truc, tu me diras si ça marche ;)

    Pour lancer la requête sur l'adresse lUrl :
    <br />webView = [[WebView alloc] initWithFrame:NSMakeRect(0,0,700,200)];<br />[webView setFrameLoadDelegate:self];<br />[[[webView mainFrame] frameView] setAllowsScrolling:NO];<br />	<br />[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(webViewProgressStarted:) name:WebViewProgressStartedNotification object:nil];<br />[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(webViewProgressChanged:) name:WebViewProgressEstimateChangedNotification object:nil];<br />[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(webViewProgressFinished:) name:WebViewProgressFinishedNotification object:nil];	<br />		<br />[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:lUrl]]];<br />
    


    Dans les méthodes du delegate :
    <br />- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {<br />	if (frame == [sender mainFrame]) {<br />		[self loadingFinished];<br />	}<br />}<br />
    


    Dans la méthode loadingFinished :
    <br />NSView *webContentView = [[[webView mainFrame] frameView] documentView];<br />if (webContentView != nil) {<br />	NSSize viewSize = [webContentView bounds].size;<br />}<br />
    


    Je pense que c'est la largeur "700" dans l'init de WebView que tu dois changer en fonction de tes besoins.
    Voilà  ;)
  • 20:29 modifié #3
    Eh bien, ça marche. Je n'avais pas pensé à  regarder du côté du WebFrameDelegate, honte à  moi!

    Un grand merci en tout cas.

    À+

    Renaud
  • ObiObi Membre
    20:29 modifié #4
    De rien, j'ai juste repris du code et modifié un chouilla. :P

    Il me semble qu'il ne faut pas oublier ça :
    <br />if (frame == [sender mainFrame])...<br />
    

    pour être sûr que c'est bien la totalité de la page qui est chargée. C'est con mais j'ai cherché longtemps :-\\
    Sinon, pense à  regarder la méthode du delegate qui est appelé en cas d'erreur sur la requête. Moi je retourne NSMakeSize(0, 0) dans ce cas et je teste les valeurs plus tard.
    Voilà  ;)
Connectez-vous ou Inscrivez-vous pour répondre.