Solved

WebBrowser Ctrl - populating vars in HTML

Posted on 2001-08-07
12
200 Views
Last Modified: 2007-11-27
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






0
Comment
Question by:PatOBrien
  • 3
  • 3
  • 2
  • +3
12 Comments
 
LVL 6

Expert Comment

by:JonFish85
ID: 6360841
you can try this:

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

hope this helps!
0
 
LVL 28

Expert Comment

by:AzraSound
ID: 6360852
>>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
 
LVL 18

Expert Comment

by:bobbit31
ID: 6360985
all webbrowser questions should be labeled:
For AzraSound ;)

0
 
LVL 28

Expert Comment

by:AzraSound
ID: 6361181
LOL
0
 
LVL 5

Author Comment

by:PatOBrien
ID: 6361490
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
 
LVL 6

Expert Comment

by:JonFish85
ID: 6361506
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
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 
LVL 6

Expert Comment

by:JonFish85
ID: 6361509
sorry, I didnt read thouroughly :-/
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6361608
Listening...
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6361615
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
 
LVL 28

Accepted Solution

by:
AzraSound earned 100 total points
ID: 6361730
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
 
LVL 27

Expert Comment

by:Ark
ID: 6361866
If WebBrowser1.ReadyState > READYSTATE_COMPLETE Then Debug.Print "TOTALLY COMPLETE! :)"

Cheers
0
 
LVL 5

Author Comment

by:PatOBrien
ID: 6363732
Thanks.  You pointed me in the right direction.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now