cicy-desktop 2.1.365 → 2.1.366
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/main.js +24 -9
package/package.json
CHANGED
package/src/main.js
CHANGED
|
@@ -41,16 +41,31 @@ electronApp.on("session-created", armNoPasskey);
|
|
|
41
41
|
// 得在客机 attach 时把 no-passkey 设成它自己的 preload,否则矩阵格子(全是 webview)里
|
|
42
42
|
// 的 FB 页照样能调 navigator.credentials.get → Windows 弹安全密钥框(实测 2.1.364)。
|
|
43
43
|
// preload 内部用「插 <script> 改主世界」,所以不用动客机的 contextIsolation。
|
|
44
|
-
|
|
44
|
+
// 实测:will-attach-webview 里设 preload、以及 <webview> 元素 preload 属性,在这个
|
|
45
|
+
// Electron + 面板 BrowserView 组合下都被忽略(preload 根本不加载)。唯一可靠的、能在
|
|
46
|
+
// 文档创建前于主世界执行、赢过 FB 页首帧 credentials.get 的办法是 CDP 的
|
|
47
|
+
// Page.addScriptToEvaluateOnNewDocument。给每个 <webview> 客机挂上。
|
|
48
|
+
const NPK_SRC = "(function(){try{"
|
|
49
|
+
+ "if(window.PublicKeyCredential){"
|
|
50
|
+
+ "PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable=function(){return Promise.resolve(false)};"
|
|
51
|
+
+ "PublicKeyCredential.isConditionalMediationAvailable=function(){return Promise.resolve(false)};}"
|
|
52
|
+
+ "if(navigator.credentials&&navigator.credentials.get){"
|
|
53
|
+
+ "var g=navigator.credentials.get.bind(navigator.credentials);"
|
|
54
|
+
+ "navigator.credentials.get=function(o){return (o&&o.publicKey)?"
|
|
55
|
+
+ "Promise.reject(new DOMException('The operation either timed out or was not allowed.','NotAllowedError')):g(o)};}"
|
|
56
|
+
+ "}catch(e){}})();";
|
|
57
|
+
async function armWebviewNoPasskey(wc) {
|
|
45
58
|
try {
|
|
46
|
-
wc.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
if (!wc || wc.isDestroyed() || wc.getType() !== "webview" || wc.__npkArmed) return;
|
|
60
|
+
wc.__npkArmed = true;
|
|
61
|
+
if (!wc.debugger.isAttached()) wc.debugger.attach("1.3");
|
|
62
|
+
await wc.debugger.sendCommand("Page.enable");
|
|
63
|
+
await wc.debugger.sendCommand("Page.addScriptToEvaluateOnNewDocument", { source: NPK_SRC });
|
|
64
|
+
try { await wc.executeJavaScript(NPK_SRC, true); } catch (_) {} // 当前已加载的文档也补一发
|
|
65
|
+
} catch (_) { try { wc.__npkArmed = false; } catch (e) {} }
|
|
66
|
+
}
|
|
67
|
+
electronApp.on("web-contents-created", (_e, wc) => {
|
|
68
|
+
try { if (wc.getType() === "webview") armWebviewNoPasskey(wc); } catch (_) {}
|
|
54
69
|
});
|
|
55
70
|
// 默认会话可能在上面这个监听器挂上之前就已经建好了(main.js 里别处也踩过同一个坑,
|
|
56
71
|
// 见启动时那段「默认会话强制直连」的保险),所以 ready 之后再补一次。幂等。
|