Sujet de Falsam: http://www.purebasic.fr/french/viewtopi ... 5&p=186386
J'avais travaillé pour simuler un seul emplacement pour tout traiter avec l’événement #PB_EventType_TitleChange, je vous soumet donc le code.
Il n'y a pas de delay ici, fonctionne seulement avec les events.
J'en ai profité pour le rendre interactif, ainsi vous pouvez changer le contenu du code html directement dans l'éditeur pour faire des tests, il y a aussi un gadget web afin de voir le contenu du code html, ça peut toujours servir même si c'est pas le but initial.
Code : Tout sélectionner
Enumeration Window
#mainForm
EndEnumeration
Enumeration Gadget
#TextInfo
#StringToSearch
#StringReplace
#Editor
#HideWeb
#Bouton
EndEnumeration
HTML.s = "<html>" + Chr(13) + Chr(10)
HTML + "<head>" + Chr(13) + Chr(10)
HTML + "<meta http-equiv='X-UA-Compatible' content='IE=edge' />" + Chr(13) + Chr(10)
HTML + "<title></title>" + Chr(13) + Chr(10)
HTML + "</head>" + Chr(13) + Chr(10)
HTML + "<body>" + Chr(13) + Chr(10)
; nécessaire pour avoir l'event PB_EventType_TitleChange
; mettre au début
HTML + "<img src='http://127.0.0.1/image.image0' >" + Chr(13) + Chr(10)
HTML + "<script>" + Chr(13) + Chr(10)
HTML + "function fixedEncodeURIComponent (str) {" + Chr(13) + Chr(10)
HTML + "return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {" + Chr(13) + Chr(10)
HTML + "return '%' + c.charCodeAt(0).toString(16);" + Chr(13) + Chr(10)
HTML + "});" + Chr(13) + Chr(10)
HTML + "}" + Chr(13) + Chr(10)
HTML + "result = fixedEncodeURIComponent ('v_string');" + Chr(13) + Chr(10)
HTML + "document.title = result;" + Chr(13) + Chr(10)
HTML + "</script>" + Chr(13) + Chr(10)
HTML + "PureBasic Javascript" + Chr(13) + Chr(10)
HTML + "</body>" + Chr(13) + Chr(10)
HTML + "</html>" + Chr(13) + Chr(10)
Procedure.l FunctionJavascipt(Html.s, OldString.s, NewString.s, *Retour, MaxLen.l)
If GetWindowData(#mainForm) = 0
Html = ReplaceString(Html, OldString, NewString)
SetGadgetItemText(#HideWeb, #PB_Web_HtmlCode , html)
ProcedureReturn 0
ElseIf GetWindowData(#mainForm) = 1
SetWindowData(#mainForm, 0)
PokeS(*Retour, Left(GetGadgetItemText(#HideWeb, #PB_Web_PageTitle), MaxLen), MaxLen)
ProcedureReturn 1
EndIf
EndProcedure
If OpenWindow(#mainForm, 100, 100, 800, 800, "PB <==> JavasScript", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(#TextInfo, 10, 10, 340, 20, "Indiquer la variable à remplacer du code html puis la nouvelle valeur:")
StringGadget(#StringToSearch, 360, 10, 200, 20, "")
StringGadget(#StringReplace, 580, 10, 200, 20, "")
EditorGadget(#Editor, 0, 40, 380, 700)
WebGadget (#HideWeb, 420, 40, 380, 700, "")
ButtonGadget(#Bouton, 300, 760, 200, 20, "Test Fonction Javascipt")
SetWindowData(#mainForm, 0)
SetGadgetText(#Editor, HTML)
SetGadgetText(#StringToSearch, "v_string")
SetGadgetText(#StringReplace, "Ceci est une chaîne")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
gadget = EventGadget()
Select gadget
Case #Bouton
Retour.s = Space(256)
; le test qui suit est une astuce pour attendre le retour de l'event #PB_EventType_TitleChange
If FunctionJavascipt(GetGadgetText(#Editor), GetGadgetText(#StringToSearch), GetGadgetText(#StringReplace), @Retour.s, Len(Retour)) = 1
Debug Retour
EndIf
; il n'y a pas besoin de modifier ce qui suit en dessous.
Case #HideWeb
Select EventType()
Case #PB_EventType_TitleChange
Debug "#PB_EventType_TitleChange"
SetWindowData(#mainForm, 1)
PostEvent(#PB_Event_Gadget, #mainForm, #Bouton)
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf