Ouvrir boite de dialogue depuis lien dans webview

cocoacola71cocoacola71 Membre
février 2012 modifié dans API AppKit #1
Bonjour image/smile.png' class='bbc_emoticon' alt=':)' />



Tout d'abord je suis sur que je cherche trop compliqué, je vous explique le contexte.

J'ai une fenêtre comprenant un webview, celui-ci semble fonctionner correctement avec les plugins requis. Sauf que lorsque j'appuie sur un lien d'un navigateur comme Firefox une sorte de boite de dialoque s'ouvre me demandant si je veux continué mon action ou non. Celle ci apparait dans une autre fenêtre dans google chrome.



Sauf que mon webview lui ne veut pas l'ouvrir image/sad.png' class='bbc_emoticon' alt=':(' />

J'ai essayé plusieurs choses pour au moins ouvrir la fenêtre dans firefox du genre :
<br />
-(void) awakeFromNib{<br />
	[browser1 setUIDelegate:self];<br />
	[browser1 setPolicyDelegate:self];<br />
....}<br />
-(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id&lt;WebPolicyDecisionListener&gt;)listener {<br />
	[listener use];<br />
	NSLog(@&quot;NavigationAction&quot;);<br />
    [[NSWorkspace sharedWorkspace] openURL:[request URL]];<br />
}<br />


Cela devrait m'ouvrir tout les lien de firefox, ce qui bien-sûr ce produit HORMIS ma boite de dialogue image/whip.gif' class='bbc_emoticon' alt=' >:) ' />



J'ai essayé :
<br />
-(void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id&lt;WebPolicyDecisionListener&gt;)listener{<br />
}<br />


Mais celle-ci n'est même pas appelé, je suis un peu perdu avec cette maudite boite de dialogue.

Si quelqu'un aurait une piste cela serait génial image/thumbsup.gif' class='bbc_emoticon' alt=' :D ' />

Réponses

  • Je pensai avoir trouvé une voie avec :
    <br />
    - (void)webView:(id)webView windowScriptObjectAvailable:(id)newWindowScriptObject {<br />
      ...}<br />
    
    Sauf que cette fonction intercepte seulement les liens retournant une nouvelle page et non les lien demandant l'ouverture d'une nouvelle fenêtre...
  • Je pense que j'ai trouvé :
    <br />
    -(BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame{ ... }<br />
    
    Marche Très bien pour ouvrir la suive de la boite de dialogue en retournant YES ou NO image/crazy.gif' class='bbc_emoticon' alt=' B) ' />

    Ce qui bien-sûr ne correspond pas à  ma recherche...

    Mais par contre je m'en rapproche, j'ai essayé la même fonction retournant VOID sans succès. Celle ci n'est même pas appelé!!!
  • mpergandmpergand Membre
    mars 2012 modifié #4
    Comme dab, tes explications ne sont pas très claires ...



    Pour ouvrir une nouvelle fenêtre web, il faut implémenter createWebViewWithRequest:



    Exemple pour un une appli document-based:
    <br />
    - (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request<br />
    {<br />
    NSDocumentController* docController=[NSDocumentController sharedDocumentController];<br />
    WebViewDocument* doc=[docController makeUntitledDocumentOfType:@&quot;WebDocumentType&quot; error:nil];<br />
    <br />
    if(doc)<br />
      { NSLog(@&quot;create web view&quot;);<br />
      [docController addDocument:doc];<br />
      [doc makeWindowControllers];<br />
      [doc showWindows];<br />
      [[[doc webView] mainFrame] loadRequest:request];<br />
      return [doc webView];<br />
      }<br />
    <br />
    return nil;<br />
    }<br />
    
  • Oui lol c'est vrai que je ne suis pas très fort point de vue explication, ce qui est la base sur les forums image/crazy.gif' class='bbc_emoticon' alt=' B) ' />

    Merci de ta réponse, le soucis est que lorsque j'utilise cette solution elle n'est pas utilisé...

    La console n'affiche pas le NSLOG....



    Et là  je ne comprend pas car la méthode suivante répond bien à  une alerte
    <br />
    -(BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame{<br />
    return YES; }<br />
    
  • Donne un exemple d'URL avec cette alerte.
  • cocoacola71cocoacola71 Membre
    mars 2012 modifié #7
    Voilà  un bon exemple http://www.toutjavas...ce.php?iref=173

    Sauf que j'ai YES pour continuer et NO pour quitter
  • mpergandmpergand Membre
    mars 2012 modifié #8
    <br />
    - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message<br />
    {<br />
    NSLog(@&quot;runJavaScriptAlertPanelWithMessage&quot;);<br />
    <br />
    NSAlert* alert=[NSAlert alertWithMessageText:@&quot;Javascript Alert&quot; defaultButton:@&quot;OK&quot; alternateButton:nil<br />
    	  otherButton:nil informativeTextWithFormat: @&quot;%@&quot;,message];<br />
    [alert runModal];<br />
    }<br />
    <br />
    -(BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame<br />
    {NSLog(@&quot;runJavaScriptConfirmPanelWithMessage&quot;);<br />
    <br />
    	NSAlert* alert=[NSAlert alertWithMessageText:@&quot;Javascript Alert&quot; defaultButton:@&quot;Confirm&quot; alternateButton:@&quot;Cancel&quot;<br />
    						otherButton:nil informativeTextWithFormat:@&quot;%@&quot;, message];<br />
    	int ret=[alert runModal];<br />
    	<br />
    	if(ret==NSAlertDefaultReturn)<br />
    		return YES;<br />
    printf(&quot;cancel\n&quot;);<br />
    	return NO;<br />
    }<br />
    <br />
    
  • Génial merci!

    Tout fonctionne parfaitement! image/thumbsup.gif' class='bbc_emoticon' alt='' />

    On peut considérer ce sujet comme résolut image/clap.gif' class='bbc_emoticon' alt=' :D ' />
Connectez-vous ou Inscrivez-vous pour répondre.