Skip to content
This repository was archived by the owner on Feb 28, 2023. It is now read-only.

Commit 9d0df42

Browse files
authored
Merge pull request #9 from mattpodraza/feat/eval-and-on-doc-create-scripts
2 parents 705e99d + f02b298 commit 9d0df42

File tree

4 files changed

+52
-13
lines changed

4 files changed

+52
-13
lines changed

examples/advanced/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ func main() {
1515
webview2.WithDevtools(false),
1616
webview2.WithURL("https://golang.org"),
1717
)
18-
1918
if err != nil {
2019
log.Fatalf("Failed to create webview2: %v", err)
2120
}
2221

22+
wv.Browser().ExecuteScript("alert('Hello from webview!');")
23+
2324
if err := wv.Run(); err != nil {
2425
log.Fatalf("Failed while running webview: %v", err)
2526
}

pkg/webview2/browser.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ type browser struct {
3636
controllerCompleted int32
3737
}
3838

39+
func (wv *WebView) Browser() *browser {
40+
return wv.browser
41+
}
42+
3943
func (b *browser) embed(wv *WebView) error {
4044
b.hwnd = wv.window.handle
4145

@@ -125,7 +129,7 @@ func (b *browser) resize() error {
125129
return nil
126130
}
127131

128-
func (b *browser) navigate(url string) error {
132+
func (b *browser) Navigate(url string) error {
129133
_, _, err := syscall.Syscall(
130134
b.view.VTBL.Navigate, 3,
131135
uintptr(unsafe.Pointer(b.view)),
@@ -140,6 +144,36 @@ func (b *browser) navigate(url string) error {
140144
return nil
141145
}
142146

147+
func (b *browser) AddScriptToExecuteOnDocumentCreated(script string) error {
148+
_, _, err := syscall.Syscall(
149+
b.view.VTBL.AddScriptToExecuteOnDocumentCreated, 3,
150+
uintptr(unsafe.Pointer(b.view)),
151+
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(script))),
152+
0,
153+
)
154+
155+
if !errors.Is(err, errOK) {
156+
return err
157+
}
158+
159+
return nil
160+
}
161+
162+
func (b *browser) ExecuteScript(script string) error {
163+
_, _, err := syscall.Syscall(
164+
b.view.VTBL.ExecuteScript, 3,
165+
uintptr(unsafe.Pointer(b.view)),
166+
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(script))),
167+
0,
168+
)
169+
170+
if !errors.Is(err, errOK) {
171+
return err
172+
}
173+
174+
return nil
175+
}
176+
143177
func (b *browser) saveSetting(setter uintptr, enabled bool) error {
144178
var flag uintptr = 0
145179

pkg/webview2/webview.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func New(options ...Option) (*WebView, error) {
8282
return nil, fmt.Errorf("failed to initialize the window: %w", err)
8383
}
8484

85-
if err := wv.browser.navigate(wv.browser.config.initialURL); err != nil {
85+
if err := wv.browser.Navigate(wv.browser.config.initialURL); err != nil {
8686
return nil, fmt.Errorf("failed at the initial navigation: %w", err)
8787
}
8888

@@ -146,23 +146,23 @@ func (wv *WebView) createWindow() error {
146146
}
147147

148148
func (wv *WebView) initializeWindow() error {
149-
if err := wv.window.setTitle(wv.window.config.title); err != nil {
149+
if err := wv.window.SetTitle(wv.window.config.title); err != nil {
150150
return fmt.Errorf("failed to set the window title: %w", err)
151151
}
152152

153-
if err := wv.window.setSize(wv.window.config.width, wv.window.config.height); err != nil {
153+
if err := wv.window.SetSize(wv.window.config.width, wv.window.config.height); err != nil {
154154
return fmt.Errorf("failed to set the window size: %w", err)
155155
}
156156

157-
if err := wv.window.center(); err != nil {
157+
if err := wv.window.Center(); err != nil {
158158
return fmt.Errorf("failed to center the window: %w", err)
159159
}
160160

161-
if err := wv.window.show(); err != nil {
161+
if err := wv.window.Show(); err != nil {
162162
return fmt.Errorf("failed to show the window: %w", err)
163163
}
164164

165-
if err := wv.window.focus(); err != nil {
165+
if err := wv.window.Focus(); err != nil {
166166
return fmt.Errorf("failed to set focus: %w", err)
167167
}
168168

pkg/webview2/window.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,23 @@ type window struct {
1919
handle windows.Handle
2020
}
2121

22-
func (w *window) focus() error {
22+
func (wv *WebView) Window() *window {
23+
return wv.window
24+
}
25+
26+
func (w *window) Focus() error {
2327
return user32.SetFocus(w.handle)
2428
}
2529

26-
func (w *window) show() error {
30+
func (w *window) Show() error {
2731
return user32.ShowWindow(w.handle, user32.SW_SHOW)
2832
}
2933

30-
func (w *window) setTitle(title string) error {
34+
func (w *window) SetTitle(title string) error {
3135
return user32.SetWindowTextW(w.handle, title)
3236
}
3337

34-
func (w *window) center() error {
38+
func (w *window) Center() error {
3539
sx, err := user32.GetSystemMetrics(user32.SystemMetricsCxScreen)
3640
if err != nil {
3741
return fmt.Errorf("failed to get the horizontal screen size: %w", err)
@@ -72,7 +76,7 @@ func (w *window) center() error {
7276
return nil
7377
}
7478

75-
func (w *window) setSize(width, height int32) error {
79+
func (w *window) SetSize(width, height int32) error {
7680
rect := user32.Rect{
7781
Left: 0,
7882
Top: 0,

0 commit comments

Comments
 (0)