Utiliser le moteur de Safari
liquid
Membre
Voila, je commence à m'intéresser au développement, sous mac
(ça tombe mal cocoa-x.com est HS de puis un bout de temps )
Bref, j'explore un peu à droite et à gauche pour avoir un peu un idée de ce qui est faisable.
Je me demander donc, si , il n'était pas possible, par le biais d'api(s), d'utiliser le moteur de rendu de safari en vue, de récupérer une image/une photo d'un site web
merci d'avance de vos réponses, remarques, idées.
(ça tombe mal cocoa-x.com est HS de puis un bout de temps )
Bref, j'explore un peu à droite et à gauche pour avoir un peu un idée de ce qui est faisable.
Je me demander donc, si , il n'était pas possible, par le biais d'api(s), d'utiliser le moteur de rendu de safari en vue, de récupérer une image/une photo d'un site web
merci d'avance de vos réponses, remarques, idées.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'api du webkit (le moteur de rendu de safari) est entièrement disponible pour les programmes via les webviews.
Un des membres de OC, Ceroce, nous a raconté une intéressante histoire au sujet de cocoa-x.com sur son blog...
Regarde minibrowser par exemple.
Sinon il y'a Shiira, un navigateur basé sur le webkit ou le code source est disponible:
http://shiira.jp/download/en.php
merci à tous trois pour cette réponse Archi Rapide
Je tacherai de me documenter sur ces sujets...
A bientôt (quasiment sûr) pour de nouvelle questions
Ah où ça ?
J'ai parcouru le blog de ceroce mais j'ai rien vu, pas la moindre allusion.
J'ai mal cherché ? J'ai mal lu entre les lignes ?
Une URL pour éclairer ma lanterne ?
Consulte le profil de Ceroce.
Dans sa signature, il y a 2 adresses : choisis la seconde (celle de blogspot).
Enfin, lit le billet "L'arrivée de Mac OS X" du 5 septembre.
Ok je comprends mieux maintenant
Merci
http://www.macdevcenter.com/pub/a/mac/2004/01/23/webkit.html
Ca date un peu, mais le principe est là :
un browser avec 0 ligne de code
Quoi, y'a des gens qui lisent mon blog ?!
Moi j'aime bien le navigateur minute comme tutorial de l'ami Sylvain Gamel.
Sylvain si tu me lis
Je vais essayer de faire ce tuto; en revanche je risque fortement de revenir à la charge .... j'ai du mal avec les (tuto avec les) anciennes version Xcode/interfaceBuilder (oui ... il y a un début à tout)
[size=5pt]encore merci pour votre aide chaleureuse[/size]
Pour vous situer "ou" j'en suis je viens de finir la premiere video
j'attaque donc la "seconde" partie
La chose qui me "perturbe" et de n'avoir pas la meme interface
(en haut Xcode 3 en dessous la vidéo)
Enfin ce n'est même pas une question d'interface c'est carrément le contenu qui est différent
d'apres ce que j'ai pu lire à droite et à gauche sur internet , on ne peu plus faire cela directement d'interface builder il faut utiliser Xcode ... ???
Bref , je suis dans le flou, que dois-je faire pour creer le controller "SafariExpressController" ?
Merci d'avance de votre aide ...
2) Crées un nouveau fichier avec XCode (Objective-C Class)
3) Nomme le comme il se doit (SafariExpressControl)
4) Retourne sur IB
5) Cherche "le cube bleu" dans la bibliothèque d'objets
6) Dépose-le avec les différents éléments de ton mainmenu.nib
7) Clique dessus une fois qu'il apparaà®t
8) Va dans l'onglet "i" dans l'inspecteur de IB (avant dernier onglet)
9) Tu vois un champs de texte pour "Class name". Tape le début de ta classe (SafariExpressControl) et une fois que le nom complet apparait, appuie bien sur entrée pour valider.
Et normalement ta belle classe se trouve maintenant instancié ds ton mainmenu.nib
ceci étant j'ai encore une question ,
si j'ai bien compris
Le ".m" est pour les actions
et le .h pour ... euh les outlets .. ???
En gros ouaip Mais le .h sert plus que ça. Les outlets sont des variables objet (d'ailleurs j'appelle ça objet tout court), on peut aussi y définir des variables comme "int x;". Et le .h sert à aussi à déclarer des méthodes & actions persos.
- Le ".h" c'est ce qu'on appelle l'interface de ta classe. Pas au sens "interface graphique" bien sûr, mais au sens que ça montre juste les possibilités de ta classe. Dedans tu déclares donc les variables que contient ta classe, et tu listes juste les méthodes qu'elle contient.
L'avantage c'est qu'ainsi n'importe qui ne connaissant pas ta classe mais voulant l'utiliser (car après tout une clase est aussi souvent faite pour être réutilisée) savent quelles méhodes/fonctions/actions sont disponibles et peuvent être appelées
- Le ".m" c'est ce que l'on appelle l'implémentation de ta classe. En gros ça contient l'intelligence même de ta classe : dedans tu mets le code de tes méthodes (et de tes IBActions qui sont des méthodes au statut un peu particulier mais des méthodes quand même) en détail.
L'idée c'est que si on a besoin d'utiliser une classe, on a pas besoin de savoir comment elle est codée sous le capot, de savoir quel est le code qui est mis dans la méthode machin, du moment qu'elle fait ce qu'elle dit, la manière de le faire importe peu. Donc il suffit de regarder le .h et on a directement un résumé des possibilités de la classe sans éplucher le .m
Au final, dans le .h, tu mets les variables d'instance (variables attachées à ta classe), y compris la déclaration des IBOutlets, mais aussi la signature de tes méthodes (juste son nom et liste des arguments, sans le corps de la méthode avec son code), y compris celle de tes IBActions.
Dans le .m, le code de tes méthodes et IBActions.
Actuellement je cherche à transformer mon navigateur en ceci:
A Droite La capture , à gauche la page "html"
(voir aussi
http://vodpod.com/watch/638749-desaurl-0-1 [lien 1]
http://lists.apple.com/archives/cocoa-dev/2008/Apr/msg00877.html [lien 2]
)
l'auteur du logiciel que je "copie" à utiliser, d'apres le lien 2 le code suivant:
La premiere interrogation que je me pose : quel est , selon vous, l'object que je dois utiliser (dans interface builder pour "representer la partie droite")
j'ai essayer en vain de bidouiller quelques trucs avec un
NSimageView
et avec un
NSView : custom view
PS :
tout doucement j'avance ... ce soir j'ai obtenu un morceau de screenshot de google :adios!:
( A bientôt pour de nouvelles aventures nouveaux problèmes )
J'ai fait le tutoriel et j'ai un petit warning
j'ai le warning suivant...
safariExpressController.m:18: warning: no '-provisionalDataSource' method found
Je suis sous 10.4.11.....
Pourtant lorsque je le compile... tout a l'air de bien se dérouler....
Tu n'as pas oublié d'importer le WebKit ?
Oui je suis con, sinon t'aurais eu un Error et non pas un Warning.
Enfin bon ça marche c'est l'essentiel
Voici un screenshot de mon avancée;
Cependant j'ai encore besoin de vos lumières
d'une part mon appli n'est pas encore satisfaisante étant donnée que la capture ne corresponds qu'a la partie visible;
ceci étant, ceci n'est dramatique dans le sens ou je voudrais faire "disparaitre" la partie navigateur pour avoir quelque chose du type :
on entre l'url, on clic sur un bouton et on génere l'apercu du site...
voici mon code dans l'état actuel
Je vous épargne les dizaines de lignes de code mort visant à créer un WebView "virtuel";
Ps:Il s'agit certainement de méconnaissance de ma part , j'ai encore un peu de mal avec avec l'objective-c ... mais je me soigne...
Ce que je comprend pas ds ce genre de solution c'est qu'en fait ds tous les cas il faut charger la page pour pouvoir créer l'aperçu ... bon j'y vais plus directement : c'est pour faire quoi exactement ce petit soft ?
Sinon, si tu ne veux plus voir ta webview ds l'interface, mets la simplement dans une NSView ds ton .nib (sans oublier de relier l'outlet webview et le ressourceLoadDelegate). Comme ça ça sera invisible aux yeux de l'utilisateur.
Pour moi c'est la solution la plus simple possible
ben dans l'idée, il s'agirai un logiciel de capture (d'une image) d'un site web , dans la mesure du possible, (je verrai comment faire plus tard, déjà je commence par une appli basic non pas une appli en basic ;D... je complexifirai plus tard...) disponible dans la barre de menu.
pas spécialement pour concurrencer les softs deja existant (j'ai pas cette ambition là , mais il faut bien commencer par quelque chose ...)
oki je teste dès ce soir...
euuh (oui je suis encore en Cocoa Accompagnée)
si Je comprends bien :
>J'ouvre MainMenu.nib avec InterfaceBuilder
Et c'est la que je suis pas sur de comprendre
> Je supprime ma Webview
>je la remplace par un NSView ... et je rajoute un outlet (Euh ben la en fait je nage)
Le screen-shot ne fonctionnera donc pas.
Le mieux est de commencer par une webview (dans une fenêtre).
Dès qu'il faut prendre le screen-shot (par un bouton, ou suite au delegate webView:didFinishLoadForFrame:), il faut créer l'image, puis masquer la webview et enfin créer ou afficher une NSImageView de même taille à la même position que la webview masquée.