2010-09-03 6 views
1

Je me demande comment faire défiler par programmation vers une ancre donnée dans un WebView.Comment faire pour faire défiler un WebView d'une chaîne HTML vers une ancre spécifique?

Le contenu que je montre est rendu par

[[webView mainFrame] loadHTMLString:htmlString baseURL:someURL]; 

et je ne peux donc pas simplement naviguer à #anchors en les indiquant dans les URL.

Je suis à la recherche d'une méthode dans le sens de

[[webView mainFrame] scrollToAnchor:@"anchor"] 

, mais il est évidemment pas là.

TIA

+0

Voulez-vous dire que vous avez essayé, y compris l'ID dans 'baseURL' , mais cela n'a pas fonctionné? –

+0

Non, je ne pensais pas que le baseURL prêterait attention à ce genre d'information, doh. – lambda64

Répondre

3

Javascript pont en question fonctionne, mais vous pouvez aussi faire l'équivalent de Objective-C si vous aimez:

DOMDocument *doc = [[webView mainFrame] DOMDocument]; 
DOMElement *element = [doc getElementById:@"anchor"]; 
[element scrollIntoView:YES]; 
+0

C'est certainement la façon propre que je cherchais. Merci! – lambda64

0

Ok, trouvé une solution de contournement, mais je ne sais pas si cela est la bonne façon de le faire. En obtenant la référence au contexte javascript, je peux appeler des méthodes javascript dans le webFrame.

[[webView windowScriptObject] evaluateWebScript:@"document.getElementById('TheId').scrollIntoView(true);"]; 
1
- (void)viewDidLoad 
{ 
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"YOUR_STRING_WITHOUT_ANCHOR"]]]; 
} 

- (void)webViewDidStartLoad:(UIWebView *)_webView { 
    [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('YOUR_ANCHOR_HERE_WITHOUT_#').scrollIntoView(true);"]; 
} 
Questions connexes