代码拉取完成,页面将自动刷新
本库fork自 https://github.com/raintean/blink 并做了一些更新 使用html来编写golang的GUI程序(only windows), 基于miniblink开源库
go get github.com/del-xiong/miniblink
package main
import (
"github.com/del-xiong/miniblink"
"log"
)
func main() {
//设置调试模式
miniblink.SetDebugMode(true)
//初始化miniblink模块
err := miniblink.InitBlink()
if err != nil {
log.Fatal(err)
}
// 启动1366x920普通浏览器
view := miniblink.NewWebView(false, 1366, 920)
// 启动1366x920透明浏览器(只有web界面会显示)
//view := miniblink.NewWebView(true, 1366, 920)
// 加载github
view.LoadURL("https://github.com/del-xiong/miniblink")
// 设置窗体标题(会被web页面标题覆盖)
view.SetWindowTitle("miniblink window")
// 移动到屏幕中心位置
view.MoveToCenter()
// 显示窗口
view.ShowWindow()
// 开启调试模式(会调起chrome调试页面)
view.ShowDevTools()
}
# 调用函数 func (view *WebView) Inject(key string, value interface{})
# 例: 注入一个js函数 可通过js控制浏览器自身的位置 (加一个自定义限制 x不能超过1000否则抛异常)
# main.go
view.Inject("MoveWindow", func(x, y int32, relative bool) (int, error) {
rectx, _ := view.GetWindowRect()
if (relative && x+rectx > 1000) || (!relative && x > 1000) {
return 0, errors.New("x位置不能超过1000")
}
view.Move(x, y, relative)
time.Sleep(time.Second)
return int(time.Now().Unix()), nil
})
# 向JS注入一个值变量
view.Inject("typeId", 456)
# main.html/main.js
# 获取typeId值
console.log(BlinkData.typeId); // 456
# 将浏览器窗口向右移动10px 向下移动5px
await BlinkFunc.MoveWindow(10,5,true)
# 将浏览器窗口移动到屏幕x=100 y=50的位置
await BlinkFunc.MoveWindow(10,5,false)
# 等待go执行完毕并获取返回值/错误
BlinkFunc.MoveWindow(5, 5, true).then(function(val) {
console.error(val);
// 其他回调处理
}).
catch (function(err) {
// 异常捕获
console.error(err);
});
# main.html/main.js
var getLocation = function() {
return window.location;
}
# main.go
# js函数初始化之后 go可以这样调用并获取返回值
value, err := view.Invoke("getLocation")
if err != nil {
log.Println(err)
} else {
// 获取window.location对象并转为map然后获取hostname
log.Println(value.GetInterface().(map[string]interface{})["hostname"])
}
设置后只能访问指定白名单url/不能访问黑名单url 暂不支持模式匹配
白名单优先级高于黑名单,如果设置了白名单且未url不在白名单中,无论是否匹配黑名单都会拒绝访问
注意重复调用SetWhitelist/SetBlacklist不会重置之前的url,而是将新的url添加到黑白名单
// 只允许访问百度和google的robots
view.SetWhitelist([]string{"https://www.baidu.com","https://www.google.com/robots.txt"}...)
// 禁止访问头条
view.SetBlacklist([]string{"https://toutiao.com"}...)
// 清空黑名单
view.ClearBlacklist()
// 从黑名单中移除指定规则
view.RemoveFromBlacklist("https://toutiao.com")
该功能可用于修改浏览器从网络接收的数据,也可以用于设置数据返回回调(例如监控到返回敏感关键词就报警)
修改之前需要先定义需要监控的数据类型mime字符串,然后定义数据修改回调函数即可
修改数据会对性能有影响,请尽量缩小数据类型范围(例如只需要修改json的数据就不要把js/html也加入监听)
目前支持的数据类型-mime 字符串对应表
html: text/html
js: application/x-javascript
css: text/css
json: application/json
svg: image/svg+xml
使用方法
// 定义数据监听类型 可定义多个
view.AddUrlEndHandlerMimeTypes([]string{"text/html"}...)
// 将网页中的百度换成谷歌 可自己控制要处理的网址
view.SetUrlEndHandler(func(view *miniblink.WebView, mime string, url string, content []byte) []byte {
log.Println(mime)
if strings.Contains(url, ".baidu.com") {
content = bytes.Replace(content,[]byte("百度"),[]byte("谷歌"),-1)
}
return content
})
go build -tags bdebug
再次感谢miniblink项目, 另外如果觉得本项目好用请点个星.
欢迎PR, > o <
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。