@softvisio/webview 1.2.12
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of @softvisio/webview might be problematic. Click here for more details.
- package/.editorconfig +16 -0
- package/CHANGELOG.md +109 -0
- package/README.md +52 -0
- package/docs/.docs.config.yaml +5 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +48 -0
- package/docs/_sidebar.md +11 -0
- package/docs/index.html +37 -0
- package/lib/binaries/darwin/webview +0 -0
- package/lib/binaries/linux/webview +0 -0
- package/lib/binaries/win32/WebView2Loader.dll +0 -0
- package/lib/binaries/win32/elevation-required.html +22 -0
- package/lib/binaries/win32/hstart.exe +0 -0
- package/lib/binaries/win32/webview.dll +0 -0
- package/lib/binaries/win32/webview.exe +0 -0
- package/lib/index.js +145 -0
- package/package.json +27 -0
package/.editorconfig
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
root = true
|
2
|
+
|
3
|
+
[*]
|
4
|
+
indent_style = space
|
5
|
+
indent_size = 4
|
6
|
+
end_of_line = lf
|
7
|
+
charset = utf-8
|
8
|
+
trim_trailing_whitespace = true
|
9
|
+
insert_final_newline = true
|
10
|
+
max_line_length = 99999999
|
11
|
+
|
12
|
+
[*.{yml,yaml}]
|
13
|
+
indent_size = 2
|
14
|
+
|
15
|
+
[Makefile]
|
16
|
+
indent_style = tab
|
package/CHANGELOG.md
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
### 1.2.12 (2022-05-28)
|
4
|
+
|
5
|
+
Fixes:
|
6
|
+
|
7
|
+
- fix: search browser
|
8
|
+
|
9
|
+
### 1.2.11 (2022-05-28)
|
10
|
+
|
11
|
+
Fixes:
|
12
|
+
|
13
|
+
- fix: win net isolation check
|
14
|
+
|
15
|
+
### 1.2.10 (2022-05-28)
|
16
|
+
|
17
|
+
Fixes:
|
18
|
+
|
19
|
+
- fix: browser width, height
|
20
|
+
|
21
|
+
### 1.2.9 (2022-05-28)
|
22
|
+
|
23
|
+
Fixes:
|
24
|
+
|
25
|
+
- fix: browser app mode
|
26
|
+
|
27
|
+
### 1.2.8 (2022-05-28)
|
28
|
+
|
29
|
+
Fixes:
|
30
|
+
|
31
|
+
- fix: browser support
|
32
|
+
|
33
|
+
### 1.2.7 (2022-05-19)
|
34
|
+
|
35
|
+
Fixes:
|
36
|
+
|
37
|
+
- fix: windows elevation error handle
|
38
|
+
|
39
|
+
### 1.2.6 (2022-05-19)
|
40
|
+
|
41
|
+
Fixes:
|
42
|
+
|
43
|
+
- fix: windows elevation error handle
|
44
|
+
|
45
|
+
### 1.2.5 (2022-05-19)
|
46
|
+
|
47
|
+
Fixes:
|
48
|
+
|
49
|
+
- fix: windows elevation error handle
|
50
|
+
|
51
|
+
### 1.2.4 (2022-05-19)
|
52
|
+
|
53
|
+
Fixes:
|
54
|
+
|
55
|
+
- fix: error message on windows
|
56
|
+
|
57
|
+
### 1.2.3 (2022-05-19)
|
58
|
+
|
59
|
+
Fixes:
|
60
|
+
|
61
|
+
- fix: use laucher under windows
|
62
|
+
|
63
|
+
### 1.2.2 (2022-05-18)
|
64
|
+
|
65
|
+
Fixes:
|
66
|
+
|
67
|
+
- fix: windows launcher
|
68
|
+
|
69
|
+
### 1.2.1 (2022-04-23)
|
70
|
+
|
71
|
+
Fixes:
|
72
|
+
|
73
|
+
- fix: windows isolation patch removed
|
74
|
+
|
75
|
+
### 1.2.0 (2022-04-21)
|
76
|
+
|
77
|
+
Features:
|
78
|
+
|
79
|
+
- feat: abort signal support
|
80
|
+
|
81
|
+
Fixes:
|
82
|
+
|
83
|
+
- fix: spawn typo
|
84
|
+
|
85
|
+
### 1.1.2 (2022-04-16)
|
86
|
+
|
87
|
+
Fixes:
|
88
|
+
|
89
|
+
- fix: win32 loopback
|
90
|
+
|
91
|
+
### 1.1.1 (2022-04-16)
|
92
|
+
|
93
|
+
Fixes:
|
94
|
+
|
95
|
+
- fix: docs
|
96
|
+
|
97
|
+
### 1.1.0 (2022-04-16)
|
98
|
+
|
99
|
+
Features:
|
100
|
+
|
101
|
+
- feat: close events
|
102
|
+
|
103
|
+
### 1.0.0 (2022-04-16)
|
104
|
+
|
105
|
+
Fixes:
|
106
|
+
|
107
|
+
- fix: build
|
108
|
+
|
109
|
+
Migration:
|
package/README.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
<!-- !!! DO NOT EDIT, THIS FILE IS GENERATED AUTOMATICALLY !!! -->
|
2
|
+
|
3
|
+
> :information_source: Please, see the full project documentation here: [https://softvisio.github.io/webview/](https://softvisio.github.io/webview/).
|
4
|
+
|
5
|
+
# Introduction
|
6
|
+
|
7
|
+
`NodeJS` wrapper for [webview](https://github.com/webview/webview).
|
8
|
+
|
9
|
+
Compiled binaries: [suchipi/webview](https://github.com/suchipi/webview).
|
10
|
+
|
11
|
+
## Install
|
12
|
+
|
13
|
+
```shell
|
14
|
+
npm i @softvisio/webview
|
15
|
+
```
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
```javascript
|
20
|
+
import WebView from "@softvisio/webview";
|
21
|
+
|
22
|
+
const webView = new WebView("https://example.com/", { title: "Example", width: 400, height: 400 });
|
23
|
+
|
24
|
+
webView.on("close", () => {});
|
25
|
+
|
26
|
+
webView.close();
|
27
|
+
```
|
28
|
+
|
29
|
+
## Notes
|
30
|
+
|
31
|
+
### Windows
|
32
|
+
|
33
|
+
On windows, the webview will not be able to access localhost unless the following command has been run as administrator at least once before:
|
34
|
+
|
35
|
+
```shell
|
36
|
+
checknetisolation.exe LoopbackExempt -a -n=Microsoft.Win32WebViewHost_cw5n1h2txyewy
|
37
|
+
```
|
38
|
+
|
39
|
+
```shell
|
40
|
+
curl -sSLO https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
|
41
|
+
nuget.exe install Microsoft.Web.Webview2 -OutputDirectory script
|
42
|
+
|
43
|
+
cl -DSFML_STATIC /std:c++17 /EHsc /I script\Microsoft.Web.WebView2.1.0.1185.39\build\native\include script\Microsoft.Web.WebView2.1.0.1185.39\build\native\x64\WebView2Loader.dll.lib main.cc /link /out:webview.exe
|
44
|
+
```
|
45
|
+
|
46
|
+
### Linux
|
47
|
+
|
48
|
+
On Linux, you need to install GTK3 and GtkWebkit2.
|
49
|
+
|
50
|
+
```shell
|
51
|
+
sudo apt-get install libwebkit2gtk-4.0-dev
|
52
|
+
```
|
package/docs/.nojekyll
ADDED
File without changes
|
package/docs/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# Introduction
|
2
|
+
|
3
|
+
`NodeJS` wrapper for [webview](https://github.com/webview/webview).
|
4
|
+
|
5
|
+
Compiled binaries: [suchipi/webview](https://github.com/suchipi/webview).
|
6
|
+
|
7
|
+
## Install
|
8
|
+
|
9
|
+
```shell
|
10
|
+
npm i @softvisio/webview
|
11
|
+
```
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
```javascript
|
16
|
+
import WebView from "@softvisio/webview";
|
17
|
+
|
18
|
+
const webView = new WebView("https://example.com/", { title: "Example", width: 400, height: 400 });
|
19
|
+
|
20
|
+
webView.on("close", () => {});
|
21
|
+
|
22
|
+
webView.close();
|
23
|
+
```
|
24
|
+
|
25
|
+
## Notes
|
26
|
+
|
27
|
+
### Windows
|
28
|
+
|
29
|
+
On windows, the webview will not be able to access localhost unless the following command has been run as administrator at least once before:
|
30
|
+
|
31
|
+
```shell
|
32
|
+
checknetisolation.exe LoopbackExempt -a -n=Microsoft.Win32WebViewHost_cw5n1h2txyewy
|
33
|
+
```
|
34
|
+
|
35
|
+
```shell
|
36
|
+
curl -sSLO https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
|
37
|
+
nuget.exe install Microsoft.Web.Webview2 -OutputDirectory script
|
38
|
+
|
39
|
+
cl -DSFML_STATIC /std:c++17 /EHsc /I script\Microsoft.Web.WebView2.1.0.1185.39\build\native\include script\Microsoft.Web.WebView2.1.0.1185.39\build\native\x64\WebView2Loader.dll.lib main.cc /link /out:webview.exe
|
40
|
+
```
|
41
|
+
|
42
|
+
### Linux
|
43
|
+
|
44
|
+
On Linux, you need to install GTK3 and GtkWebkit2.
|
45
|
+
|
46
|
+
```shell
|
47
|
+
sudo apt-get install libwebkit2gtk-4.0-dev
|
48
|
+
```
|
package/docs/_sidebar.md
ADDED
package/docs/index.html
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<!-- !!! DO NOT EDIT, THIS FILE IS GENERATED AUTOMATICALLY !!! -->
|
4
|
+
|
5
|
+
<html>
|
6
|
+
<head>
|
7
|
+
<meta charset="UTF-8" />
|
8
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
9
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
10
|
+
|
11
|
+
<link rel="stylesheet" id="lightTheme" href="https://cdn.jsdelivr.net/npm/docsify-themeable/dist/css/theme-simple.css" />
|
12
|
+
<link rel="stylesheet" id="darkTheme" href="https://cdn.jsdelivr.net/npm/docsify-themeable/dist/css/theme-simple-dark.css" />
|
13
|
+
<link rel="stylesheet" href="https://softvisio.github.io/cli/assets/theme/theme.css" />
|
14
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" />
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
<nav>
|
18
|
+
<a href="#/changelog">Changelog</a> • <a href="https://github.com/softvisio/webview/discussions" title="Discussions"><i class="fa-regular fa-comments"></i></a> • <a href="https://github.com/softvisio/webview/issues" title="Issues"><i class="fa-solid fa-bug"></i></a> • <a href="https://www.npmjs.com/package/@softvisio/webview" title="NPM package"><i class="fa-brands fa-npm"></i></a> • <a href="#toggleTheme"><i class="fa-solid fa-adjust"></i> Theme</a>
|
19
|
+
</nav>
|
20
|
+
<div id="app"></div>
|
21
|
+
<div id="gotoTop"><a href="#gotoTop">🡡 Top</a></div>
|
22
|
+
|
23
|
+
<script>
|
24
|
+
window.$docsify = { alias: { "/changelog": "https://raw.githubusercontent.com/softvisio/webview/master/CHANGELOG.md" }, auto2top: true, externalLinkTarget: "_self", loadSidebar: true, maxLevel: 2, name: "@softvisio/webview", relativePath: true, repo: "https://github.com/softvisio/webview", search: { depth: 3 }, subMaxLevel: 2, tabs: {} };
|
25
|
+
</script>
|
26
|
+
|
27
|
+
<script src="https://softvisio.github.io/cli/assets/theme/theme.js"></script>
|
28
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify"></script>
|
29
|
+
<script src="https://cdn.jsdelivr.net/npm/prismjs/components/prism-bash.min.js"></script>
|
30
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
|
31
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.min.js"></script>
|
32
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify-tabs"></script>
|
33
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify-copy-code"></script>
|
34
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify-pagination/dist/docsify-pagination.min.js"></script>
|
35
|
+
<script src="https://cdn.jsdelivr.net/npm/docsify/lib/plugins/external-script.min.js"></script>
|
36
|
+
</body>
|
37
|
+
</html>
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Elevated permissions are required</title>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
|
+
<meta name="title" content="" />
|
7
|
+
<meta name="keywords" content="" />
|
8
|
+
<meta name="description" content="" />
|
9
|
+
<meta name="robots" content="" />
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
+
<meta http-equiv="Content-Style-Type" content="text/css" />
|
12
|
+
</head>
|
13
|
+
<body>
|
14
|
+
<h2>Elevated permissions are required</h2>
|
15
|
+
<p>
|
16
|
+
Microsoft webview requires elevated permissions to access localhost.
|
17
|
+
<br />
|
18
|
+
Please, run it with the evevated permissions or run following command manually as administrator to allow access to the localhost for webview (this is required one time only):
|
19
|
+
</p>
|
20
|
+
<code>CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.Win32WebViewHost_cw5n1h2txyewy"</code>
|
21
|
+
</body>
|
22
|
+
</html>
|
Binary file
|
Binary file
|
Binary file
|
package/lib/index.js
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
import Events from "node:events";
|
2
|
+
import childProcess from "node:child_process";
|
3
|
+
import fs from "node:fs";
|
4
|
+
|
5
|
+
const BINARIES = {
|
6
|
+
"win32": "webview.exe",
|
7
|
+
"linux": "webview",
|
8
|
+
"darwin": "webview",
|
9
|
+
};
|
10
|
+
|
11
|
+
var BROWSER, WIN32_NET_ISOLATION;
|
12
|
+
|
13
|
+
export default class WebView extends Events {
|
14
|
+
#proc;
|
15
|
+
|
16
|
+
constructor ( url, { title, width, height, maximized = true, signal, dataDir, forceWebView } = {} ) {
|
17
|
+
super();
|
18
|
+
|
19
|
+
if ( !( url instanceof URL ) ) url = new URL( url );
|
20
|
+
|
21
|
+
var command, args;
|
22
|
+
|
23
|
+
// browser
|
24
|
+
BROWSER: if ( !forceWebView ) {
|
25
|
+
if ( process.platform === "win32" ) {
|
26
|
+
if ( BROWSER == null ) {
|
27
|
+
BROWSER = false;
|
28
|
+
|
29
|
+
const locations = [
|
30
|
+
|
31
|
+
//
|
32
|
+
process.env["LocalAppData"] + "/Google/Chrome/Application/chrome.exe",
|
33
|
+
process.env["ProgramFiles(x86)"] + "/Google/Chrome/Application/chrome.exe",
|
34
|
+
process.env["ProgramFiles"] + "/Google/Chrome/Application/chrome.exe",
|
35
|
+
process.env["ProgramFiles(x86)"] + "/Microsoft/Edge/Application/msedge.exe",
|
36
|
+
];
|
37
|
+
|
38
|
+
for ( const location of locations ) {
|
39
|
+
if ( fs.existsSync( location ) ) {
|
40
|
+
BROWSER = location;
|
41
|
+
|
42
|
+
break;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
if ( !BROWSER ) break BROWSER;
|
48
|
+
|
49
|
+
command = BROWSER;
|
50
|
+
|
51
|
+
args = [
|
52
|
+
|
53
|
+
//
|
54
|
+
"--new-window",
|
55
|
+
"--no-first-run",
|
56
|
+
...( dataDir ? [`--user-data-dir=${dataDir}`] : [] ),
|
57
|
+
"--app=" + url,
|
58
|
+
];
|
59
|
+
|
60
|
+
if ( width || height ) {
|
61
|
+
args.push( `--window-size=${width || 100000},${height || 100000}` );
|
62
|
+
}
|
63
|
+
else if ( maximized ) {
|
64
|
+
args.push( "--start-maximized" );
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
// webview
|
70
|
+
if ( !command ) {
|
71
|
+
if ( process.platform === "win32" && ( url.hostname === "localhost" || url.hostname.startsWith( "127." ) ) && !WIN32_NET_ISOLATION ) {
|
72
|
+
if ( WIN32_NET_ISOLATION == null ) {
|
73
|
+
if ( !this.#checkWindowsNetIsolation() ) {
|
74
|
+
|
75
|
+
// set loopback net isolation
|
76
|
+
childProcess.execFileSync( "hstart.exe", ["/ELEVATE", "/NOCONSOLE", "checknetisolation.exe LoopbackExempt -a -n=Microsoft.Win32WebViewHost_cw5n1h2txyewy"], {
|
77
|
+
"cwd": new URL( `binaries/${process.platform}`, import.meta.url ),
|
78
|
+
"windowsHide": true,
|
79
|
+
"encoding": "utf8",
|
80
|
+
} );
|
81
|
+
|
82
|
+
if ( !this.#checkWindowsNetIsolation() ) {
|
83
|
+
WIN32_NET_ISOLATION = false;
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
WIN32_NET_ISOLATION = true;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
WIN32_NET_ISOLATION = true;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
if ( !WIN32_NET_ISOLATION ) {
|
95
|
+
console.log( `Unable to start webview, elevated permissions are required (https://github.com/webview/webview/issues/599)` );
|
96
|
+
|
97
|
+
url = new URL( `binaries/${process.platform}/elevation-required.html`, import.meta.url );
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
command = BINARIES[process.platform];
|
102
|
+
|
103
|
+
args = ["--url", url];
|
104
|
+
if ( title ) args.push( "--title", title );
|
105
|
+
if ( width ) args.push( "--width", width );
|
106
|
+
if ( height ) args.push( "--height", height );
|
107
|
+
}
|
108
|
+
|
109
|
+
this.#proc = childProcess
|
110
|
+
.spawn( command, args, {
|
111
|
+
"cwd": new URL( `binaries/${process.platform}`, import.meta.url ),
|
112
|
+
"stdio": "ignore",
|
113
|
+
signal,
|
114
|
+
} )
|
115
|
+
.once( "error", e => {
|
116
|
+
if ( e.code !== "ABORT_ERR" ) throw e;
|
117
|
+
} )
|
118
|
+
.once( "close", () => {
|
119
|
+
this.#proc = null;
|
120
|
+
|
121
|
+
this.emit( "close" );
|
122
|
+
} );
|
123
|
+
}
|
124
|
+
|
125
|
+
// properties
|
126
|
+
isStarted () {
|
127
|
+
return !!this.#proc;
|
128
|
+
}
|
129
|
+
|
130
|
+
close () {
|
131
|
+
if ( !this.#proc ) return;
|
132
|
+
this.#proc.kill();
|
133
|
+
|
134
|
+
this.#proc = null;
|
135
|
+
}
|
136
|
+
|
137
|
+
#checkWindowsNetIsolation () {
|
138
|
+
const stdout = childProcess.execFileSync( "checknetisolation.exe", ["LoopbackExempt", "-s"], {
|
139
|
+
"windowsHide": true,
|
140
|
+
"encoding": "utf8",
|
141
|
+
} );
|
142
|
+
|
143
|
+
return stdout.includes( "microsoft.win32webviewhost_cw5n1h2txyewy" );
|
144
|
+
}
|
145
|
+
}
|
package/package.json
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"name": "@softvisio/webview",
|
3
|
+
"version": "1.2.12",
|
4
|
+
"description": "Webview bindings",
|
5
|
+
"keywords": [
|
6
|
+
"softvisio",
|
7
|
+
"webview"
|
8
|
+
],
|
9
|
+
"homepage": "https://softvisio.github.io/webview/",
|
10
|
+
"bugs": {
|
11
|
+
"url": "https://github.com/softvisio/webview/issues",
|
12
|
+
"email": "zdm <zdm@softvisio.net>"
|
13
|
+
},
|
14
|
+
"repository": {
|
15
|
+
"type": "git",
|
16
|
+
"url": "https://github.com/softvisio/webview.git"
|
17
|
+
},
|
18
|
+
"license": "ISC",
|
19
|
+
"author": "zdm <zdm@softvisio.net>",
|
20
|
+
"type": "module",
|
21
|
+
"imports": {
|
22
|
+
"#lib/*": "./lib/*.js"
|
23
|
+
},
|
24
|
+
"exports": {
|
25
|
+
".": "./lib/index.js"
|
26
|
+
}
|
27
|
+
}
|