代码拉取完成,页面将自动刷新
同步操作将从 归位/webview 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package main
import (
"log"
"net"
"net/http"
"strconv"
"strings"
"github.com/zserge/webview"
)
const (
windowWidth = 480
windowHeight = 320
)
var indexHTML = `
<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<button onclick="external.invoke('close')">Close</button>
<button onclick="external.invoke('fullscreen')">Fullscreen</button>
<button onclick="external.invoke('unfullscreen')">Unfullscreen</button>
<button onclick="external.invoke('open')">Open</button>
<button onclick="external.invoke('opendir')">Open directory</button>
<button onclick="external.invoke('save')">Save</button>
<button onclick="external.invoke('message')">Message</button>
<button onclick="external.invoke('info')">Info</button>
<button onclick="external.invoke('warning')">Warning</button>
<button onclick="external.invoke('error')">Error</button>
<button onclick="external.invoke('changeTitle:'+document.getElementById('new-title').value)">
Change title
</button>
<input id="new-title" type="text" />
<button onclick="external.invoke('changeColor:'+document.getElementById('new-color').value)">
Change color
</button>
<input id="new-color" value="#e91e63" type="color" />
</body>
</html>
`
func startServer() string {
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
log.Fatal(err)
}
go func() {
defer ln.Close()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(indexHTML))
})
log.Fatal(http.Serve(ln, nil))
}()
return "http://" + ln.Addr().String()
}
func handleRPC(w webview.WebView, data string) {
switch {
case data == "close":
w.Terminate()
case data == "fullscreen":
w.SetFullscreen(true)
case data == "unfullscreen":
w.SetFullscreen(false)
case data == "open":
log.Println("open", w.Dialog(webview.DialogTypeOpen, 0, "Open file", ""))
case data == "opendir":
log.Println("open", w.Dialog(webview.DialogTypeOpen, webview.DialogFlagDirectory, "Open directory", ""))
case data == "save":
log.Println("save", w.Dialog(webview.DialogTypeSave, 0, "Save file", ""))
case data == "message":
w.Dialog(webview.DialogTypeAlert, 0, "Hello", "Hello, world!")
case data == "info":
w.Dialog(webview.DialogTypeAlert, webview.DialogFlagInfo, "Hello", "Hello, info!")
case data == "warning":
w.Dialog(webview.DialogTypeAlert, webview.DialogFlagWarning, "Hello", "Hello, warning!")
case data == "error":
w.Dialog(webview.DialogTypeAlert, webview.DialogFlagError, "Hello", "Hello, error!")
case strings.HasPrefix(data, "changeTitle:"):
w.SetTitle(strings.TrimPrefix(data, "changeTitle:"))
case strings.HasPrefix(data, "changeColor:"):
hex := strings.TrimPrefix(strings.TrimPrefix(data, "changeColor:"), "#")
num := len(hex) / 2
if !(num == 3 || num == 4) {
log.Println("Color must be RRGGBB or RRGGBBAA")
return
}
i, err := strconv.ParseUint(hex, 16, 64)
if err != nil {
log.Println(err)
return
}
if num == 3 {
r := uint8((i >> 16) & 0xFF)
g := uint8((i >> 8) & 0xFF)
b := uint8(i & 0xFF)
w.SetColor(r, g, b, 255)
return
}
if num == 4 {
r := uint8((i >> 24) & 0xFF)
g := uint8((i >> 16) & 0xFF)
b := uint8((i >> 8) & 0xFF)
a := uint8(i & 0xFF)
w.SetColor(r, g, b, a)
return
}
}
}
func main() {
url := startServer()
w := webview.New(webview.Settings{
Width: windowWidth,
Height: windowHeight,
Title: "Simple window demo",
Resizable: true,
URL: url,
ExternalInvokeCallback: handleRPC,
})
w.SetColor(255, 255, 255, 255)
defer w.Exit()
w.Run()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。