Displaying HTML with OLE

Hi,

I’m running WinXP/SP2 and Ruby 1.8.2. I tried the sample below from The
Ruby Way,2nd ed., with modified HTML (which I tested independently).
When I run it in a Command Window, I get:

K:_Projects\Ruby_Ruby_Techniques\Win32Ole>TestingOleWithHtml.rb
K:/_Projects/Ruby/_Ruby_Techniques/Win32Ole/TestingOleWithHtml.rb:22:in
`method_missing’: document (WIN32OLERuntimeError)
OLE error code:80004005 in

HRESULT error code:0x80020009
Exception occurred. from
K:/_Projects/Ruby/_Ruby_Techniques/Win32Ole/TestingOleWithHtml.rb:22

Any ideas?

Thanks in Advance,
Richard

Source: The Ruby Way, 2nd ed., pg. 585

require “win32ole”

msg = “Hello, World”

html = <<EOF

Hello, World

My "Hello, World" Demo

Not much of a demo, eh?

EOF

ie = WIN32OLE.new(“InternetExplorer.Application”)

ie.document.open # <====
Line 22
ie.document.write html
ie.document.close

sleep 5
quit

Is your default homepage a blank page? I think this might be a problem.
Set
your default page to something else or try putting “ie.gohome” or "
ie.navigate(“http://nlsmith.com”)" before the ie.document.open. Then
you’ll
have a document object to work with.

Nate

On Jan 23, 4:51 pm, “Richard”
[email protected] wrote:

  <No Description>

My "Hello, World" Demo

ie.document.write html ie.document.close

sleep 5
quit

Try navigating to a page before writing to the Document object. The
code below worked for me…

ie = WIN32OLE.new(“InternetExplorer.Application”)
ie.Visible = 1
ie.Navigate(‘about:blank’)
sleep(1) while ie.ReadyState != 4
ie.Document.open
ie.Document.write html
ie.Document.close
sleep 5
quit

Hope that helps.

Mully

Hi David,

Your technique worked perfectly. I was disappointed by my system’s
performance, however.

I used a .rbw extension to avoid the creation of a temporary Command
Window. Is there a simple approach to putting up a graphical progress
bar that:
– loops while checking to see whether the IE window had opened yet;
and
– closes when the IE window is displayed?

Best wishes,
Richard

Hi David,

Try reducing the sleep interval…

sleep(1) while ie.ReadyState != 4

That sped it up a lot. Of course, a couple of test runs doesn’t prove
much, e.g. my virus checker might have been running unattended in
background yesterday.

Nevertheless, this is a useful technique for me.

Again, many thanks.
Richard

On Jan 23, 10:50 pm, “Richard”
[email protected] wrote:

Hi David,

Your technique worked perfectly. I was disappointed by my system’s
performance, however.

Richard-

Try reducing the sleep interval…

sleep(1) while ie.ReadyState != 4

…to…

sleep(0.1) while ie.ReadyState != 4

Mully