Webview 将浏览器作为golang的GUI

1、Golang的跨平台WebVIEW小库。使用WebKit(Gtk/Cocoa)和Edge(Windows)

将浏览器作为golang的GUI界面使用,外面可套层壳,也可直接控制。这解决了golang的前端短板,利用现成的HTML来完成交互部份。

        例如这里使用webview:github.com/webview/webview。前后台的交互其实可以通过类似VUE来实现,当然它有自己的交互方式。因为库较为简单,无法对套壳的窗口进行控制。在Win下,需要一些操作,例如窗口最大化,无窗口化,浮于顶层。发现可以使用 win库来进行。

示例如下:

package main

import (
	"fmt"
	"github.com/lxn/win"
	"github.com/webview/webview"
	"os/exec"
	"runtime"
	"time"
)

func main() {
	debug := true
	w := webview.New(debug)
	defer w.Destroy()
	w.SetTitle("Minimal webview example")
	w.SetSize(800, 600, webview.HintNone)
	w.Navigate("https://i.scwy.net")
	hwnd := w.Window()

	// 查找窗口
	// hwnd, err = GetWindowHwndByName("firfox.exe")
	// hWnd = win.HWND(unsafe.Pointer(hwnd))
	// if IsMyWindowsHwnd(hWnd) {}

	go func() {
		time.Sleep(2 * time.Second)
		hWnd := win.HWND(hwnd)
		win.MoveWindow(hWnd, int32(10), int32(10), int32(200), int32(400), true)            // 移动窗口位置和大小
		win.SetWindowPos(hWnd, win.HWND_TOPMOST, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE) // 置顶
		//win.SetWindowPos(hWnd, win.HWND_NOTOPMOST, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE) // 不置顶
		// style &= ^win.WS_SIZEBOX & ^win.WS_CAPTION  // 无边框
		style := win.GetWindowLong(hWnd, win.GWL_STYLE)               // 普通窗口样式
		style |= win.WS_SIZEBOX | win.WS_CAPTION                      // 有边框
		win.SetWindowLong(hWnd, win.GWL_STYLE, style)                 // 设置样式
		win.SendMessage(hWnd, win.WM_KEYDOWN, 0x0000007A, 0x20380001) // 按下按键
		win.SendMessage(hWnd, win.WM_KEYUP, 0x0000007A, 0x003C0001)   // 抬起按键
	}()

	w.Run()
}

func OpenWithBrowser(url string) error {
	switch runtime.GOOS {
	case "linux":
		return exec.Command("xdg-open", url).Start()
	case "windows":
		return exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
	case "darwin":
		return exec.Command("open", url).Start()
	default:
		return fmt.Errorf("runtime.GOOS %s is not supported", runtime.GOOS)
	}
}

2、Golang的桌面GUI开发的客户端,依赖谷歌浏览器

使用go + GUI组件的方式调用本机Chrome浏览器,使用wensocket的方式实现程序和web之间Js函数调用的功能。

程序调用了kernel32.dll和user32.dll,会被360认为是木马,需添加信任测试。
gui组件库 https://github.com/zserge/lorca

你可能感兴趣的:(分享,golang)