2010-01-29 4 views
2

Je souhaite créer un Webview où j'ai un contrôle total sur le contenu qu'il charge. Essentiellement, je veux fournir une instance d'une classe qui joue le rôle des différents serveurs Web nommés dans les URL. Idéalement, je fournirais à ce webview un délégué et indiquerait au délégué chaque URL dont il a besoin et le délégué répondrait avec le type et les données MIME. Une manière de faire ceci serait littéralement d'avoir un serveur web fonctionnant sur un port personnalisé (disons 2222) et fournir une URL initiale comme http://localhost:2222/initial/base/url. Cependant, cela ne me permet que d'intercepter des URL relatives sur le même hôte, et non des URL absolues vers d'autres hôtes. Les délégués WebView que j'ai vus dans la documentation semblent permettre au contrôle de haut niveau de l'utilisateur, comme choisir une politique d'URL à charger, ou surveiller la progression des charges, mais pas la capacité d'intercepter et contrôler les données qui est chargé lui-même.Webserver synthétique avec Cocoa WebView sous Mac OS X

Des conseils sur la façon dont je pourrais atteindre cet objectif?

Répondre

0

NSURLProtocol sert cette fonction. Vous enregistrez votre classe en tant que protocole (peut-être mieux appelé un gestionnaire de protocole), et chaque requête NSURLRequest vous sera acheminée pour vous demander si vous pouvez le gérer. Vous dites OUI et votre objet a un contrôle total sur le processus de chargement de l'URL. Ceci est lié au moteur principal de chargement d'URL, donc il prend en charge tous les WebViews, NSURLConnections, etc. Voir this question pour d'autres pointeurs.