mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 03:52:41 +08:00
[v2] Improve translation of URI to file to be loaded
This commit is contained in:
parent
187bf3085c
commit
8107a8bd1e
20
v2/internal/frontend/desktop/common/uri_translate.go
Normal file
20
v2/internal/frontend/desktop/common/uri_translate.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import "net/url"
|
||||||
|
|
||||||
|
func TranslateUriToFile(uri string, expectedScheme string, expectedHost string) (file string, match bool, err error) {
|
||||||
|
url, err := url.Parse(uri)
|
||||||
|
if err != nil {
|
||||||
|
return "", false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if url.Scheme != expectedScheme || url.Host != expectedHost {
|
||||||
|
return "", false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath := url.Path
|
||||||
|
if filePath == "" {
|
||||||
|
filePath = "/"
|
||||||
|
}
|
||||||
|
return filePath, true, nil
|
||||||
|
}
|
@ -19,12 +19,12 @@ import (
|
|||||||
"html/template"
|
"html/template"
|
||||||
"log"
|
"log"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/wailsapp/wails/v2/internal/binding"
|
"github.com/wailsapp/wails/v2/internal/binding"
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
||||||
|
"github.com/wailsapp/wails/v2/internal/frontend/desktop/common"
|
||||||
"github.com/wailsapp/wails/v2/internal/logger"
|
"github.com/wailsapp/wails/v2/internal/logger"
|
||||||
"github.com/wailsapp/wails/v2/pkg/options"
|
"github.com/wailsapp/wails/v2/pkg/options"
|
||||||
)
|
)
|
||||||
@ -270,12 +270,18 @@ func (f *Frontend) ExecJS(js string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *Frontend) processRequest(r *request) {
|
func (f *Frontend) processRequest(r *request) {
|
||||||
url := C.GoString(r.url)
|
uri := C.GoString(r.url)
|
||||||
url = strings.TrimPrefix(url, "wails://wails")
|
|
||||||
if !strings.HasPrefix(url, "/") {
|
// Translate URI to file
|
||||||
|
file, match, err := common.TranslateUriToFile(uri, "wails", "wails")
|
||||||
|
if err != nil {
|
||||||
|
// TODO Handle errors
|
||||||
|
return
|
||||||
|
} else if !match {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_contents, _mimetype, err := f.assets.Load(url)
|
|
||||||
|
_contents, _mimetype, err := f.assets.Load(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
f.logger.Error(err.Error())
|
f.logger.Error(err.Error())
|
||||||
//TODO: Handle errors
|
//TODO: Handle errors
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"text/template"
|
"text/template"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
@ -35,6 +34,7 @@ import (
|
|||||||
"github.com/wailsapp/wails/v2/internal/binding"
|
"github.com/wailsapp/wails/v2/internal/binding"
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
||||||
|
"github.com/wailsapp/wails/v2/internal/frontend/desktop/common"
|
||||||
"github.com/wailsapp/wails/v2/internal/logger"
|
"github.com/wailsapp/wails/v2/internal/logger"
|
||||||
"github.com/wailsapp/wails/v2/pkg/options"
|
"github.com/wailsapp/wails/v2/pkg/options"
|
||||||
)
|
)
|
||||||
@ -328,14 +328,16 @@ func (f *Frontend) processRequest(request unsafe.Pointer) {
|
|||||||
uri := C.webkit_uri_scheme_request_get_uri(req)
|
uri := C.webkit_uri_scheme_request_get_uri(req)
|
||||||
goURI := C.GoString(uri)
|
goURI := C.GoString(uri)
|
||||||
|
|
||||||
// Translate URI
|
file, match, err := common.TranslateUriToFile(uri, "wails", "")
|
||||||
goURI = strings.TrimPrefix(goURI, "wails://")
|
if err != nil {
|
||||||
if !strings.HasPrefix(goURI, "/") {
|
// TODO Handle errors
|
||||||
|
return
|
||||||
|
} else if !match {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load file from asset store
|
// Load file from asset store
|
||||||
content, mimeType, err := f.assets.Load(goURI)
|
content, mimeType, err := f.assets.Load(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/wailsapp/wails/v2/internal/binding"
|
"github.com/wailsapp/wails/v2/internal/binding"
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
||||||
|
"github.com/wailsapp/wails/v2/internal/frontend/desktop/common"
|
||||||
"github.com/wailsapp/wails/v2/internal/logger"
|
"github.com/wailsapp/wails/v2/internal/logger"
|
||||||
"github.com/wailsapp/wails/v2/pkg/options"
|
"github.com/wailsapp/wails/v2/pkg/options"
|
||||||
)
|
)
|
||||||
@ -335,14 +336,16 @@ func (f *Frontend) processRequest(req *edge.ICoreWebView2WebResourceRequest, arg
|
|||||||
//Get the request
|
//Get the request
|
||||||
uri, _ := req.GetUri()
|
uri, _ := req.GetUri()
|
||||||
|
|
||||||
// Translate URI
|
file, match, err := common.TranslateUriToFile(uri, "file", "wails")
|
||||||
uri = strings.TrimPrefix(uri, "file://wails")
|
if err != nil {
|
||||||
if !strings.HasPrefix(uri, "/") {
|
// TODO Handle errors
|
||||||
|
return
|
||||||
|
} else if !match {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load file from asset store
|
// Load file from asset store
|
||||||
content, mimeType, err := f.assets.Load(uri)
|
content, mimeType, err := f.assets.Load(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user