Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je souhaite ouvrir une URL web depuis un script pb à l'aide de la méthode Run.
Pour se faire, je lance un Run sur un .bat dans lequel je fais un "start %1", %1 correspondant à l'url fournit dans la string passée à la fonction run.
en gros ça fait, Run("lanceurWeb.bat http://www.google.fr"). Là ça marche nickel, le navigateur par défaut se lance et ouvre l'url fournie en paramètre.
Là où ça coince, c'est lorsque l'url possède des paramètres et donc le caractère '='. Je ne sais pas pourquoi mais mon url est tronquée juste avant ce caractère et du coup je n'arrive pas à lancer correctement la page web souhaitée.
Savez-vous comment dire à Run de conserver la chaine telle quelle ?
Merci
Hors ligne
çà doit venir des "&" de ton url, en commande batch cela à une signification particulière tout comme les | d'ailleurs.
Tu peux faire précéder les & et les | ainsi que les ^ par ^ avant de passer ton url a Run.
ls_url = replaceall( ls_url, "^", "^^" ) ls_url = replaceall( ls_url, "|", "^|" ) ls_url = replaceall( ls_url, "&", "^&" ) Run("lanceurWeb.bat " + ls_url)
Hors ligne
Bonjour,
Il existe une méthode dédié dans powerbuilder pour faire cela : HyperlinkToURL
string ls_url inet iinet_base IF trim(ls_url) <> "" AND NOT IsNull(ls_url) THEN IF GetContextService("Internet", iinet_base) > 0 THEN iinet_base.HyperlinkToURL(ls_url) END IF END IF
Parcontre cette méthode ne fonctionne plus avec les versions les plus récente de FireFox, tu peux contourner le problème de cette façon :
Run("rundll32 url.dll,FileProtocolHandler " + ls_url)
Hors ligne
buck a écrit:
Parcontre cette méthode ne fonctionne plus avec les versions les plus récente de FireFox, tu peux contourner le problème de cette façon :
Code: pb
Run("rundll32 url.dll,FileProtocolHandler " + ls_url)
et là on retombe sur le problème des & contenu par l'url que l'on veux donner à Run
Hors ligne
Bonjour,
Non, cela fonctionne sans problème.
Hors ligne
buck a écrit:
Bonjour,
Non, cela fonctionne sans problème.
are you sure ?
>type test.cmd @echo you said %%1 = "%1" @echo you said %%2 = "%2" @echo you said %%3 = "%3" @echo you ask %%* = "%*" >test test.cmd you said %1 = "http://test.com you said %2 = "" you said %3 = "" you ask %* = "http://test.com" >test http://test.com?arg1=val1 you said %1 = "http://test.com?arg1" you said %2 = "val1" you said %3 = "" you ask %* = "http://test.com?arg1=val1" >test http://test.com?arg1=val1&arg2=val2 you said %1 = "http://test.com?arg1" you said %2 = "val1" you said %3 = "" you ask %* = "http://test.com?arg1=val1" 'arg2' is not recognized as an internal or external command, operable program or batch file. >test http://test.com?arg1=val1^&arg2=val2 you said %1 = "http://test.com?arg1" you said %2 = "val1&arg2" you said %3 = "val2" you ask %* = "http://test.com?arg1=val1&arg2=val2"
Hors ligne
Bonjour,
String ls_url = "http://test.com?arg1=val1^&arg2=val2" Run("rundll32 url.dll,FileProtocolHandler " + ls_url)
Hors ligne
Effectivement, ça marche sans échapper !
C'est seulement lorsque l'on passe des arguments à un fichier .bat / .cmd qu'il faut échapper alors !
Merci pour la précision
Hors ligne
Je pense que l'argument de la commande run est converti implicitement par Powerbuilder.
Hors ligne
pas sûre, car j'ai essayé Run("test.cmd http://test.com?arg1=val1&arg2=val2 & pause") et là on voit que les & sont bien interprété comme étant des séparateurs de commandes :
you said %1 = "http://test.com?arg1" you said %2 = "val1" you said %3 = "" you ask %* = "http://test.com?arg1=val1" 'arg2' is not recognized as an internal or external command, operable program or batch file. Press any key to continue . . .
Du coup c'est un peu logique floue...
Hors ligne
Je pense que l'astuce est tout simplement la :
C:\>rundll32 url.dll,FileProtocolHandler "http://www.test.com?arg1=val&arg2=val2" C:\>rundll32 url.dll,FileProtocolHandler http://www.test.com?arg1=val&arg2=val2
Le premier ouvre : http://www.test.com?arg1=val&arg2=val2
Le second ouvre : http://www.test.com?arg1=val1
Hors ligne
Effectivement et en fait c'est le système windows qui semble reparser les paramètres différemment pour un .cmd ce qu'il ne fait pas pour un .exe
Hors ligne