WebBrowser Ctrl - populating vars in HTML

In a VB EXE project ... how do you bind or populate variables in html pages while using the WebBrowser control to display the html?

I'm aware of using client side or server side variables in ASP pages but I don't want to develop a DHTML project nor an IIS application.  I want to use the WebBrowser to display local html files, but I need to be able to replace some of the text with variable information..

It seems to me that pre-processing the html document prior to sending it to the WebBrowser in overkill or a "brute force" method.  That is, I could read through the html, looking for variables (eg.  <!LastName>  ) and replace that with the variable text before sending it to the WebBrowser control.

Actually, that's just a one-way communication anyway.  I guess I'm also looking for getting info back from the html page, perhaps the text in a text box, or the value of a radio button.  So how would you reference named objects in the document?... something like....

lsLastName = WebBrowser1.Document.formName.textareaName.value






LVL 5
PatOBrienAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
AzraSoundConnect With a Mentor Commented:
for the "wait" loop, try:

WebBrowser.Navigate strSomewhere
Do While WebBrowser.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Loop

or, you can set this value in the WebBrowser's DocumentComplete event.  you can set some boolean flag indicating whether to set the value in the DocumentComplete event or not, e.g.,

Private Sub WebBrowser_DocumentComplete(...)
   If blnSetValue = True Then
      WebBrowser.Document.all("EEName").innertext = strNewValue
   End If
End Sub
0
 
JonFish85Commented:
you can try this:

WebBrowser.Document.Body.innerHTML = Replace(WebBrowser.Document.Body.innerHTML, "<MyTag>", "VariableInfo")

hope this helps!
0
 
AzraSoundCommented:
>>something like....
>>lsLastName = WebBrowser1.Document.formName.textareaName.value

yes, or:
var = WebBrowser1.Document.all("elementName").AnyProperty

your options for building the html are:
1) you can build the html on the fly
2) do search and replace
3) set values for named elements directly

for option 3, you can set the value for a textbox, for example, by using the same syntax as above, e.g.:

WebBrowser1.Document.all("txtName").value = "Some text"

where the html for that textbox may look like:

<input type="text" name="txtName">
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
bobbit31Commented:
all webbrowser questions should be labeled:
For AzraSound ;)

0
 
AzraSoundCommented:
LOL
0
 
PatOBrienAuthor Commented:
Well, I couldn't get the method suggested by JonFish85 to work.

Using the #3 method suggested by AzraSound produced the following:

in my html document I added:

<span id="EEName">x</span>

where I wanted the name info to appear.

in my project, in a command_click event I had the navigate command and the innerText command as follows:

    WebBrowser1.Navigate2 App.Path & "\html\test.html"
    WebBrowser1.Document.All("EEName").innerText = "Elvis"
   
I got an error on the second line.... error 91 Object variable or With Block Variable not set.

However, when I went into debug mode I could step [F8] through the line and the resulting browser display showed the "Elvis" name right where I wanted it!!

I tried putting in a loop that waited while WebBrowerser1.busy was true.  That didn't help.  In fact I tried a 3 second delay between the two lines.  That didn't help either.


Finnaly, I moved the #2 line above to the WebBrowser1.NavigateComplete2 event

I had to add some code to check that the LocationName was the same as the html file that I was loading, but it seemed to work.
   
Next I'll try this with some text fields and radio buttons.
0
 
JonFish85Commented:
try this:

WebBrowser1.Navigate2 App.Path & "\html\test.html"
Do Until WebBrowser1.Busy = False
Doevents
Loop
WebBrowser1.Document.All("EEName").innerText = "Elvis"

hope this helps!
0
 
JonFish85Commented:
sorry, I didnt read thouroughly :-/
0
 
Richie_SimonettiIT OperationsCommented:
Listening...
0
 
Richie_SimonettiIT OperationsCommented:
I think that if you don't want "brute-force" approach, first need to show the document and on the documentcomplete event do the changes.
0
 
ArkCommented:
If WebBrowser1.ReadyState > READYSTATE_COMPLETE Then Debug.Print "TOTALLY COMPLETE! :)"

Cheers
0
 
PatOBrienAuthor Commented:
Thanks.  You pointed me in the right direction.
0
All Courses

From novice to tech pro — start learning today.