Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Javascript]Determiner la largeur de la page

Sujet résolu
    3 novembre 2010 à 16:47:32

    Salut à tous,
    Je suis en train de travailler sur un petit projet de navigateur web sans grande envergure et j'essaie de déterminer les dimensions de la page chargée afin d'ajuster la fenetre à la page. Par chance, le framework que j'utilise me permet d'envoyer des scripts javascripts à la page web qu'elle peut executer.
    Voici mon code:
    NSString *width = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"];
    


    Le probleme est que j'ai un bug bizarre avec la page de Google mais pas avec les autres pages.

    Ma question est donc: est ce la bonne fonction Javascript ou il y en a une autre?

    Merci!
    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2010 à 16:55:46

      Essaie avec ça :

      document.getElementsByTagName('html')[0].scrollWidth;
      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2010 à 18:46:42

        Merci pour ta réponse ^^
        Ca n'a rien changé du tout hélas. En fait, a chaque fois que j'essaie de redimensionner la fenetre, la premiere fois donne un bon resultat. Puis les autres fois, la fenetre grandit plus que ce qu'il n'en faut ...
        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2010 à 18:50:19

          J'ai du mal à voir le problème en fait car mon truc renvoi la taille que prend le contenu de la page.

          Après il faut que tu sois conscient que si un design est fait avec des pourcentages, le contenu sera toujours proportionnel à la taille de la fenêtre.
          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2010 à 19:10:25

            Une vidéo vaut mieux qu'un long discours, j'ai uploadé une vidéo dans laquelle on voit que le bouton FIT (qui ajuste la fenetre) fonctionne la premiere fois, puis augmente la taille de la fenetre sans raison (??). Lorsqu'on diminue la largeur de la fenetre a une valeur inferieure a la largeur de la page (on voit l'ascenceur horizontal apparaitre), le bouton FIT refonctionne normalement puis recommence a faire des trucs aléatoires (c'est plus prononcé sur Google que sur Yahoo).
            Je suis certain que mon code n'est pas buggué, mais je le poste à titre indicatif.

            - (void)fitWindow {
            	WebView *web= [[tabView selectedTabViewItem] webView];
            	if (web != nil) {
            		NSString *width = [web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"];
            		NSRect newFrame= window.frame;
            		
            		newFrame.size.width= 0;
            		newFrame.size.width= [width intValue] + 20;
            		if (newFrame.size.width >= [window minSize].width) {
            			[window setFrame:newFrame display:YES animate:YES];
            		}
            	}
            }
            


            Une idée? :)
            • Partager sur Facebook
            • Partager sur Twitter
              3 novembre 2010 à 19:14:33

              Essaie ça :

              - (void)fitWindow {
                  WebView *web= [[tabView selectedTabViewItem] webView];
                  if (web != nil && ([web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"] intValue) != ([web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].offsetWidth;"] intValue)) {
                      NSString *width = [web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"];
                      NSRect newFrame= window.frame;
                      
                      newFrame.size.width= 0;
                      newFrame.size.width= [width intValue] + 20;
                      if (newFrame.size.width >= [window minSize].width) {
                          [window setFrame:newFrame display:YES animate:YES];
                      }
                  }
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
                3 novembre 2010 à 19:31:21

                C'est parfait ca fonctionne maintenant ^^

                Pourrais tu m'expliquer ce qui s'est passé?

                PS: il y a quelques corrections à faire sur le code, j'ai vérifié et il ne s'agit pas de intValue mais de floatValue qu'il faut utiliser ;)
                Au fait, tu as mis des parenthèses au lieu d'accolades autour des messages, voici le bon code:
                - (void)fitWindow {
                    WebView *web= [[tabView selectedTabViewItem] webView];
                    if (web != nil && [[web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"] floatValue] != [[web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].offsetWidth;"] floatValue]) {
                        NSString *width = [web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"];
                        NSRect newFrame= window.frame;
                        
                        newFrame.size.width= 0;
                        newFrame.size.width= [width intValue] + 20;
                        if (newFrame.size.width >= [window minSize].width) {
                            [window setFrame:newFrame display:YES animate:YES];
                        }
                    }
                }
                
                • Partager sur Facebook
                • Partager sur Twitter
                  3 novembre 2010 à 19:39:41

                  Désolé pour les parenthèses, je connais pas Objective-C et il m'avait semblé voir des parenthèses :)

                  Ensuite pourquoi floatValue ? Les nombres renvoyés sont des entiers, donc int non ?

                  Enfin bref.

                  En fait comme je disais, certain site sont en "pourcentage" donc s'adapte à la taille de ta fenêtre.

                  Donc la première fois que tu cliques, tu récupères une certaine taille à laquelle tu ajoutes 20. Du coup, le site s'adapte et grossi de 20px.

                  Et du coup quand tu re-cliques, le site est 20px plus gros, donc tu élargis encore.

                  Le code que je t'ai donné, vérifie en fait si offsetWidth == scrollWidth, c'est à dire si il y a une scrollbarre ou non. Si il n'y a pas de scrollbarre, on fait rien.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 novembre 2010 à 20:11:09

                    Pas grave pour l'erreur ;) C'est juste pour que ceux qui passent sur ce sujet ne soient pas surpris :p

                    Pourquoi floatValue? Parce que la structure NSRect est composée de NSSize et NSPoint et chacune est composée par deux CGFloat (un typedef vers double ou float selon la platforme).

                    GG pour le truc du pourcentage!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [Javascript]Determiner la largeur de la page

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown