Je développe une demande en cacao, et j'aimerais savoir s'il y a un moyen / comment effectuer tout lien cliqué sur My Webview pour lancer dans Safari (ou le navigateur par défaut). Merci d'avance! P>
4 Réponses :
Je viens de courir dans ce problème moi-même et je l'ai résolu de cette façon:
Mon objet de contrôleur principal a été défini comme la stratégieDélégate de WebView. P>
puis implémentez cette méthode: p> < PRE> XXX PRE>
J'ai besoin d'avoir la vérification de l'hôte là-bas, car sinon lorsque je charge le contenu initial de la WEBView (juste une page HTML statique de mon projet), il a été lancé dans Safari. Maintenant, juste des liens avec des hôtes réels (liens externes) sont envoyés à Safari, qui est le comportement que je voulais. Je pense que je ne pouvais pas non plus définir la stratégieDélégate qu'après le chargement de la page initiale. P> P>
Je suis tombé sur le même problème et la solution que j'ai trouvée n'est pas trop intuitive.
Comme réponse précédente indiquée, vous devez utiliser le protocole WebpolicyDelegate code> défini dans code>. C'est un protocole informel, vous ne pouvez donc pas écrire @interface mydelegate: NsObject #import webview: DépartPolicyForNAVIGHIERNAVIGATION: DEMANDE: CADRE: DISCITLISTENER: CODE> Méthode de suivi: P> - (void)webView:(WebView *)webView
decidePolicyForNavigationAction:(NSDictionary *)actionInformation
request:(NSURLRequest *)request
frame:(WebFrame *)frame
decisionListener:(id <WebPolicyDecisionListener>)listener
{
if ([actionInformation objectForKey:WebActionElementKey]) {
[listener ignore];
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
else {
[listener use];
}
}
Merci pour la pointe! Je n'ai pas dû naviguer uniquement les liens externes vers Safari. Pour obtenir un nom Ancreur (avec #) pour afficher dans la WEBVIEW, j'ai suivi:
- (void)webView:(WebView *)webView
decidePolicyForNavigationAction:(NSDictionary *)actionInformation
request:(NSURLRequest *)request
frame:(WebFrame *)frame
decisionListener:(id <WebPolicyDecisionListener>)listener
{
NSDictionary *info = actionInformation;
NSURL *url = [info objectForKey:WebActionOriginalURLKey];
NSString *path = [url absoluteString];
NSRange range;
range = [path rangeOfString:@"file://"];
if (range.location != 0) {
// open in Safari ö
[listener ignore];
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
else {
// open in webView because link starts with file://...
[listener use];
}
}
EXEMPLE SWIFT ci-dessous: P>
override func webView(webView: WebView!, decidePolicyForNavigationAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) {
//Check action action type, if click, open an external view
let info:NSDictionary = actionInformation as NSDictionary
let mode:Int = info.valueForKey(WebActionNavigationTypeKey) as Int
if mode == 0 {
NSWorkspace.sharedWorkspace().openURL(request.URL)
self.mainFrame.reload()
}else{
listener.use()
}
}
J'ai essayé cela, mais le rappel de la stratégie ne s'appelle pas de liens cliqués, uniquement lors du chargement d'une page.