【问题标题】:Webview not rendering page on some Windows systemsWebview 在某些 Windows 系统上不呈现页面
【发布时间】:2021-09-22 04:03:57
【问题描述】:

我正在使用 github.com/webview/webview 在 Go 应用程序上呈现 Web 视图。它在我正在编写它的一个系统上运行良好。但在某些全新安装的系统上,该请求无法到达 http 服务器。看来故障是在 webview dll 中。但是我不知道如何调试它。

目前在 Windows 10 Pro x64 21H1 上使用 Go 1.17.1

我正在运行非常简单的代码,类似于示例...我还使用 go 来提供 http 页面。然后我打开一个 webview 框与之交互。

  • 在 Windows 开发机器上,一切正常。
  • 在单独全新安装 Windows(所有相同版本)时,该框显示为空白 - 只是白色。虽然没有崩溃。只是没有显示任何内容。
  • 从本地计算机上的浏览器访问相同的 URL 是可行的。所以页面可以正常工作。
  • 更改 URL 以引用外部站点(例如 http://google.com),它适用于所有计算机
  • 在某些机器上,它可以工作。其他人没有。
  • 我将 DLL 与 EXE 放在同一个文件夹中。
  • 添加调试语句,它主要是按预期执行所有内容。
  • 但是,请求没有发送到 HTTP 服务器
  • 顺便说一句,该代码在 Linux 上也可以正常工作...

我能看到的唯一模式是工作的 Windows 机器似乎是已经存在并更新了一段时间的旧机器。相对新鲜的安装似乎失败了。那么一定有某种微妙的依赖关系?

我不确定如何调试它。它似乎在 Webview 代码中失败了。

任何建议将不胜感激...下面的简单测试代码...

main.go

package main

import (
    "html/template"
    "log"
    "net/http"

    "github.com/gorilla/mux"
    "github.com/webview/webview"
)

var (
    IPport = "127.0.0.1:8080"
    URL    = "http://" + IPport
)

func main() {
    log.Print("Starting main")

    go HTTPServer(IPport)

    OpenUI(URL)
}

func OpenUI(url string) {
    log.Print("Starting OpenUI")

    w := webview.New(true)
    defer w.Destroy()

    w.SetTitle("Webview Window")
    w.SetSize(800, 600, webview.HintFixed)
    w.Navigate(url)
    w.Run()
}

func HTTPServer(ipPort string) {
    log.Print("Starting HTTPserver")

    rtr := mux.NewRouter()
    rtr.HandleFunc("/", Page)

    log.Printf("Listening on %s\n", ipPort)
    err := http.ListenAndServe(ipPort, rtr)
    if err != nil {
        log.Print(err)
    }
}

func Page(w http.ResponseWriter, r *http.Request) {
    log.Print("Starting Page handler")

    var err error
    tmpl := template.New("page")

    if tmpl, err = tmpl.ParseFiles("page.gohtml"); err != nil {
        log.Print(err)
    }

    if err = tmpl.ExecuteTemplate(w, "page", nil); err != nil {
        log.Print(err)
    }

}

page.gohtml

{{define "page"}}
<!doctype html>
<html lang="en">
<body>
    <h1>Hello Page</h1>
</body>
</html>
{{end}}

工作系统的输出...

2021/09/21 11:51:00 Starting main
2021/09/21 11:51:00 Starting OpenUI
2021/09/21 11:51:00 Starting HTTPserver
2021/09/21 11:51:00 Listening on 127.0.0.1:8080
2021/09/21 11:51:02 Starting Page handler

失败系统的输出...同样,如果您使用网络浏览器点击它,这将起作用...例如边缘

2021/09/21 11:52:00 Starting main
2021/09/21 11:52:00 Starting OpenUI
2021/09/21 11:52:00 Starting HTTPserver
2021/09/21 11:52:00 Listening on 127.0.0.1:8080

【问题讨论】:

    标签: go webview


    【解决方案1】:

    经过几天的摆弄......我想通了。

    您需要实际安装其中一个 Webview2 运行时。似乎在我的旧 Windows 系统上,所需的依赖项已通过以前的一些更新或其他未知方式得到满足。我当然从未专门安装过运行时。但在全新安装时,您需要安装其中一个运行时选项。您仍然需要与 exe 位于同一文件夹中的 dll。安装后,它可以在任何地方使用。

    见: https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution

    有人应该更新 README 以提及运行时的安装...我使用了 Bootstrapper,因为它更小。

    感谢收听...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 2022-10-04
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多