Je travaille sur un projet qui utilise un WebView pour afficher la majorité de son contenu. Le contenu est chargé à partir de fichiers HTML sur un disque que je n'ai pas écrit et dont je n'ai aucun contrôle. Je veux être en mesure d'appliquer un style CSS personnalisé à chaque page chargée dans la vue. Pour ce faire, j'ai mis l'extrait suivant dans -(void)webView:didFinishLoadForFrame:
Ajout de nouveaux éléments au DOM d'un WebFrame à partir de Cocoa/Objective-C
DOMDocument *doc = [frame DOMDocument];
DOMElement *link = [doc createElement:@"link"];
[link setAttribute:@"rel" value:@"stylesheet"];
[link setAttribute:@"type" value:@"text/css"];
[link setAttribute:@"href" value:[cssPath path]];
DOMNodeList *heads = [doc getElementsByName:@"head"];
[[heads item:0] appendChild:link];
J'ai essayé la même séquence d'instructions dans un fichier JavaScript (JavaScript, non Objective-C bien sûr) et il a travaillé. Le code ci-dessus, cependant, ne fonctionne pas. Je l'ai parcouru avec le débogueur Xcode, et il semble que tout fonctionne (les variables sont initialisées correctement avec des données valides, etc.) mais je ne vois pas de changement dans le cadre. Qu'est-ce que je fais mal? Y a-t-il une meilleure façon de faire ce que j'essaie d'accomplir? Y at-il une raison pour que cela fonctionne en JavaScript mais pas en Objective-C?
Éditer: J'ai joué avec cela au cours des deux derniers jours. Je n'ai toujours pas été en mesure d'utiliser les objets DOM *, mais j'ai obtenu des résultats qui font ceci:
NSString *js = @"var link = document.createElement('link');";
js = [js stringByAppendingString:@"link.setAttribute('rel', 'stylesheet');"];
js = [js stringByAppendingString:@"link.setAttribute('type', 'text/css');"];
js = [js stringByAppendingFormat:@"link.setAttribute('href', '%@');",
[defaultCSSURL path]];
js = [js stringByAppendingString:
@"document.getElementsByTagName('head')[0].appendChild(link);"];
[[view windowScriptObject] evaluateWebScript:js];
Je ne suis pas particulièrement satisfait de cette solution, mais c'est la seule façon que je suis en mesure pour le faire fonctionner. Notez que defaultCSSURL
est un NSURL statique pointant vers un fichier CSS dans le projet.
Eh bien, vous n'avez aucun pointeur. Comment le code est-il même en train de compiler ?! –
Oups! Bonne prise. Copier et coller l'erreur .... Je l'ai réparé ci-dessus. – ngephart