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

Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

you can try this:

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

hope this helps!
>>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">
all webbrowser questions should be labeled:
For AzraSound ;)

Big Business Goals? Which KPIs Will Help You

The most successful MSPs rely on metrics – known as key performance indicators (KPIs) – for making informed decisions that help their businesses thrive, rather than just survive. This eBook provides an overview of the most important KPIs used by top MSPs.

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.
try this:

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

hope this helps!
sorry, I didnt read thouroughly :-/
Richie_SimonettiIT OperationsCommented:
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.
for the "wait" loop, try:

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

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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
If WebBrowser1.ReadyState > READYSTATE_COMPLETE Then Debug.Print "TOTALLY COMPLETE! :)"

PatOBrienAuthor Commented:
Thanks.  You pointed me in the right direction.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic Classic

From novice to tech pro — start learning today.