|
|
|
|
Hello à tous,
j'ai un super défit pour tous les amateurs de programmation.
J'ai dans une base de données Access deux WebBrowser. En gros ce sont des controles ActivX qui permettent d'intégrer des browsers web basés sur IE sur un formulaire access. Rien de chinois jusque là.
Après bien des manips, j'ai réussis à en faire plus ou moins ce que je voulais.
Le seul problème, c'est que l'intérêt majeur de ce programme vient de son "refresh automatique".
Toutes les x minutes (peu importe x), les pages des webbrowsers sont rafrachies automatiquement, évitant à ses utilisateurs d'être éjectés comme des malpropres par un timeout dû à leur inactivité.
A ce point, je précise que ce programme est uniquement dans un but professionel pour mon boulot. Il n'est pas question ici de tricher sur certains sites pour faire croire qu'on y est resté des heures de façons à avoir des points ou Dieu sait quoi...
Bref! Mon problème c'est qu'une fois le "logon" sur le site effectué, un message apparait à chaque refresh : "The page cannot be refreshed without resending the information. Click Retry to send the information again, or click Cancel to return to the page that you were trying to view."
Donc si je comprend bien, étant donné que l'utilisateur est loggé, chaque click renvoie des informations pour permettre au serveur de savoir qui il est. Mais dans le cadre de ce programme, c'est fort embêtant...
Serait-il possible de se débarasser de ce message en l'interceptant dans mon code (par exemple) ?
Je pense qu'une option d'IE permet de se débarrasser de ce genre de messages (ce qui pourrait marcher vu que les webbrowsers sont basés sur IE), mais ici au travail on ne peut pas paramétrer IE...
Merci à tous les génies qui trouveraient une solution à ce problème...
Aides-toi et le ciel t'aidera...Configuration: Windows XP
Internet Explorer 6.0
Ton problème est simple. Quand on se logge sur un site, la connexion reste allumée (keep alive). Sur le web, il y a 4 façons de faire se conserver les données d'une page à l'autre:
|
Hum.......
|
Ce n'est pas URL la propriété qu'il te faut, mais bien LocationURL
dim postDataPage dim urlPage sub initialization() url = "http://lesite.com/login" demarrerBoucle... end sub sub aChaqueXMin() controleWeb.navigate2 url, 0, "_self", postData end sub Private Sub object_BeforeNavigate2( ByVal pDisp As Object, ByRef Url As Variant, ByRef Flags As Variant, ByRef TargetFrameName As Variant, ByRef PostData As Variant, ByRef Headers As Variant, ByRef Cancel As Boolean) if(urlPage = Url and PostData <> Nothing) then postDataPage= postData end if end sub donne moi en des nouvelles Gloire à Windows!! -Deadly Predator |
Ouééééééééééééé.
|
Bon je te montre ce que j'ai fais jusque maintenant...
|
J'ai de quoi de fonctionnel!! Voici le code
Option Compare Database
Const tempsSeconde = 10
Dim postDataPage
Dim urlPage
Dim bStopBoucle
Private Sub btnAccueil_Click()
webBrowser.GoHome
End Sub
Private Sub btnGo_Click()
goBrowser txtURL.Value
End Sub
Public Sub goBrowser(url As String)
On Error Resume Next
bStopBoucle = False
urlPage = url
webBrowser.Navigate2 urlPage, 0, "_self"
Do Until bStopBoucle
Dim dateDebut
dateDebut = Now
Do Until ((Abs(DateDiff("s", Now, dateDebut)) > tempsSeconde And webBrowser.ReadyState >= 2) Or bStopBoucle)
DoEvents
Loop
txtPOST.Value = postDataPage
webBrowser.Navigate2 urlPage, &H4 Or &H8, "_self", postDataPage
Loop
End Sub
Private Sub btnNext_Click()
On Error Resume Next
webBrowser.GoForward
End Sub
Private Sub btnRefresh_Click()
On Error Resume Next
webBrowser.Refresh2 3
End Sub
Private Sub btnPrecedent_Click()
On Error Resume Next
webBrowser.GoBack
End Sub
Private Sub btnStop_Click()
webBrowser.Stop
End Sub
Private Sub btnStopBoucle_Click()
bStopBoucle = True
End Sub
Private Sub webBrowser_DocumentComplete(ByVal pDisp As Object, url As Variant)
txtURL.Value = url
urlPage = url
'If (URL = urlPage) Then
'Dim dateDebut
'dateDebut = Now
'Do Until (DateDiff("s", Now, dateDebut) > tempsSeconde)
'DoEvents
'Loop
'webBrowser.Navigate2 urlPage, 0, "_self", postDataPage
'End If
End Sub
Private Sub webBrowser_BeforeNavigate2(ByVal pDisp As Object, url As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
On Error Resume Next
Dim strResult
strResult = ""
Dim bytes As Variant
bytes = CVar(PostData)
For I = 0 To UBound(bytes)
strResult = strResult & Chr(bytes(I))
Next
'If (url = urlPage) Then
If (txtPOST.Value = Null) Then
txtPOST.Value = vbNullString
End If
If (strResult <> vbNullString) Then
txtPOST.Value = Now & ": " & vbCrLf & strResult & vbCrLf & "-----------------" & txtPOST.Value
End If
postDataPage = PostData
'End If
End Sub
C'est vraiment tout croche mais ça marche. Ce code est à mettre dans ton form ce qui commence par btn est un bouton de commande, donc place btnAccueil, btnGo, btnRefresh, ... et les txt c'est des boites de texte. Il te faut txtURL, qui va contenir l'URL et txtPOST, qui va afficher les variables POST en cours. Au pire je t'envoie le mdb par courriel... Gloire à Windows!! -Deadly Predator |
Bon j'ai trouvé une solution qui marche \o/
|