class Fzeet::WebBrowser
Attributes
cp[R]
events[R]
handlers[R]
ocs[R]
oips[R]
parent[R]
Public Class Methods
new(parent)
click to toggle source
Calls superclass method
# File lib/fzeet/windows/shdocvw.rb, line 120 def initialize(parent) @parent = parent @oips = Windows::OleInPlaceSite.new @oips.instance_variable_set(:@browser, self) class << @oips attr_reader :browser def CanInPlaceActivate Windows::S_OK end def GetWindow(phwnd) phwnd.write_pointer(browser.parent.handle) Windows::S_OK end def GetWindowContext(pframe, pdoc, prPos, prClip, pinfo) pframe.write_pointer(0) pdoc.write_pointer(0) Windows.GetClientRect(browser.parent.handle, prPos) Windows.GetClientRect(browser.parent.handle, prClip) Windows::S_OK end def OnPosRectChange(prPos) browser.QueryInstance(Windows::OleInPlaceObject) { |oipo| oipo.SetObjectRects(prPos, prPos) } Windows::S_OK end end @ocs = Windows::OleClientSite.new @ocs.instance_variable_set(:@browser, self) class << @ocs attr_reader :browser def QueryInterface(piid, ppv) if Windows::GUID.new(piid) == Windows::IOleInPlaceSite::IID ppv.write_pointer(browser.oips); browser.oips.AddRef return Windows::S_OK end super end end super() @events = Windows::WebBrowserEvents.new @events.instance_variable_set(:@browser, self) class << @events attr_reader :browser (self::VTBL.members - Windows::IDispatch::VTBL.members).each { |name| define_method(name) { |dispParams| (handlers = browser.handlers && browser.handlers[name]) && handlers.each { |handler| (handler.arity == 0) ? handler.call : handler.call(dispParams) } } } end QueryInstance(Windows::ConnectionPointContainer) { |cpc| FFI::MemoryPointer.new(:pointer) { |pcp| cpc.FindConnectionPoint(Windows::WebBrowserEvents::IID, pcp) @cp = Windows::ConnectionPoint.new(pcp.read_pointer) } } @cookie = nil FFI::MemoryPointer.new(:ulong) { |p| @cp.Advise(@events, p); @cookie = p.get_ulong(0) } QueryInstance(Windows::OleObject) { |oo| oo.SetClientSite(@ocs) oo.DoVerb(Windows::OLEIVERB_INPLACEACTIVATE, nil, @ocs, 0, @parent.handle, @parent.rect) } @parent. on(:size) { r = @parent.rect put_Top(r[:top]); put_Left(r[:left]); put_Width(r[:right]); put_Height(r[:bottom]) }. on(:destroy) { @oips.Release @ocs.Release @cp.Unadvise(@cookie) @events.Release @cp.Release Release() }. instance_variable_set(:@__WebBrowser__, self) end
Public Instance Methods
back()
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 247 def back; GoBack(); self; rescue; self end
document()
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 254 def document disp = nil FFI::MemoryPointer.new(:pointer) { |pdisp| get_Document(pdisp) disp = Windows::Dispatch.new(pdisp.read_pointer) return disp.QueryInstance(Windows::HTMLDocument2) } ensure disp.Release if disp end
forward()
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 248 def forward; GoForward(); self; rescue; self end
goto(where)
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 237 def goto(where) where = Windows.SysAllocString("#{where}\0".encode('utf-16le')) Navigate(where, nil, nil, nil, nil) self ensure Windows.SysFreeString(where) end
home()
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 249 def home; GoHome(); self end
on(event, &block)
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 231 def on(event, &block) ((@handlers ||= {})[event] ||= []) << block self end
refresh()
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 252 def refresh; Refresh(); self end
search()
click to toggle source
# File lib/fzeet/windows/shdocvw.rb, line 250 def search; GoSearch(); self end