Ouvrir lien vers safari depuis WebView

Bonjour,



Je me trouve actuellement dans une impasse.

Mon WebView fonctionne très bien lorsque je reste sur le site concerné par mon application.

Or par exemple, lorsque j'ai un lien vers le site Silverlight me proposant de télécharger l'application je ne peux pas ouvrir le lien (même dans mon WebView me proposant l'accès au lien).

Je pense que cela est du à  la demande d'ouverture d'un second WebView pour afficher la page, ou le téléchargement.

Le problème est que je n'arrive pas à  ouvrir le lien, j'ai pourtant un second WebView qui est utilisé dans certain cas:
<br />
-(WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request{<br />
	[otherWin makeKeyAndOrderFront:sender];<br />
	return browserWin;<br />
}<br />
D'ailleurs il n'est pas toujours solliciter. J'ai donc penser que dans certain cas il serait préférable d'ouvrir Safari pour des cas comme le téléchargement ou autre...

J'utilise donc :
<br />
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id&lt;WebPolicyDecisionListener&gt;)listener{<br />
	//....<br />
	[listener use];<br />
}<br />
Or l'écoute me bloque dans le chargement de ma page (et par ailleurs cette méthode m'ouvre toutes les pages!! lol c'est le bordel image/sad.png' class='bbc_emoticon' alt=':(' /> )



Merci d'avance pour votre aide, je suis un peu largué là  image/unsure.png' class='bbc_emoticon' alt=' :* ' />

Réponses

  • mpergandmpergand Membre
    novembre 2012 modifié #2
    <br />
    -(WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request{<br />
    		[otherWin makeKeyAndOrderFront:sender];<br />
    		return browserWin;<br />
    }<br />
    




    browserWin est une fenêtre ou un WebView ?



    Mets un NSLog dans cette méthode pour savoir si elle est bien appelée.
  • Bonjour,



    Et merci pour ta réponse.

    BrowserWin est un autre WebView dans une nouvelle fenêtre "otherWin".

    Celui-ci doit donc charger l'URL en question...
  • mpergandmpergand Membre
    novembre 2012 modifié #4
    OK, c'est bon.



    Et cette méthode est bien appelée ?



    Donne un exemple de page avec ce lien que je puisse faire un test.
  • Oui, un NSLog me permet de savoir que l'appel est bien pris en compte.

    Or l'appel est appelé seulement dans le cas d'un aperçu d'une version imprimable de la page.

    Pour le téléchargement de l'application Silverlight, la méthode n'est pas appelée par exemple, ou si je la force (clic doit dur Webview / Open in new window) la méthode est bien appelé mais le WebView est vide.



    Soit le problème vient de cette méthode, soit un autre moyen doit exister... image/wacko.png' class='bbc_emoticon' alt=' :* ' />
  • mpergandmpergand Membre
    novembre 2012 modifié #6
    Pour gérer les download, il faut implémenter le WebDownload protocol. (qui hérite de NSURLDownload)



    Il faut ajouter aussi:
    <br />
    - (void)webView:(WebView *)sender decidePolicyForMIMEType:(NSString *)type request:(NSURLRequest *)request frame:(WebFrame *)<br />
    		 frame decisionListener:(id&lt;WebPolicyDecisionListener&gt;)listener<br />
    {<br />
    <br />
    if ([[sender class] canShowMIMEType:type])<br />
    [color=#808080]  {[/color]<br />
    [color=#808080]  [listener use];[/color]<br />
    [color=#808080]  }[/color]<br />
    [color=#808080]else[/color]<br />
    [color=#808080] {[/color]<br />
    [color=#808080]  [listener download];[/color]<br />
    [color=#808080] }[/color]<br />
    <br />
    }<br />
    
  • Super, c'est parfait!!

    Comme pour l'instant c'est en test, j'utilise Safari pour le téléchargement:
    <br />
    	    [listener download];<br />
    	    [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[[request URL] absoluteString]]];<br />
    	    return;<br />
    
    J'explorerai par la suite WebDownload...



    Et dernière question, en parlant de Silverlight image/whip.gif' class='bbc_emoticon' alt=' >:) ' />

    Est-il possible selon vous, d'intégrer Silverlight directement dans mon application?

    Que ca soit le WebView de mon appli ou Safari, l'utilisation du plugin est affreusement lente!!!!

    Actuellement en lien étroit avec Silverlight, ils ne me circulent pas les bonnes informations...

    Si vous avez des infos, ou bien eu le même genre de problème, je serai ravi d'avoir vos avis sur la cause image/rolleyes.gif' class='bbc_emoticon' alt='::)' />



    Merci encore!!
  • mpergandmpergand Membre
    novembre 2012 modifié #8
    Pas de lenteur chez moi dans navigateur perso:

    Silverlight version 3.0.50106.0

    Webkit version 5534.50.1 (sur 10.5)
  • cocoacola71cocoacola71 Membre
    novembre 2012 modifié #9
    Merci pour ton test, cela est un bonne nouvelle pour moi.

    Car le problème provient des utilisateurs de l'application (pas tous).

    Peut être la config est mauvaise lors de compilation!

    Je ne me trompe pas en compilant en 32bits? Car 64bits m'apporte une erreur "Plugin Failure"
  • En 32 bit universal, ça marche avec tout.
  • Merci pour l'info,

    Sauf qu'en 32 bit, le webview crash au chargement de Silverlight...

    Auparavant lorsque je compilais sous Lion le problème ne survenait pas, Mountain poserait il problème?

    A vrai dire j'ai du mal à  saisir, voici ma config:

    - Architecture : 32-bit Intel

    - Valid Architecture : i386 x86_x64

    - OS X Deployement Target : OS X 10.6

    Maudit Silverlight image/evil.gif' class='bbc_emoticon' alt='>:D' />



    Merci pour votre aide image/smile.png' class='bbc_emoticon' alt=':)' />
  • Après quelques recherches, il semble que:



    - ne fonctionne qu'en 64 bits

    - il faut forcer le user agent sur Safari



    http://stackoverflow.com/questions/12205081/webview-crashes-when-rendering-silverlight-site



    http://www.useragentstring.com/



    Cela fonctione dans mon cas avec SL en 64ibts, mon appli en 64bits et user agent sur Safari.

    Je n'ai pas testé sur Lion ou ML.
Connectez-vous ou Inscrivez-vous pour répondre.