pizza-studio / HSRPizzaHelper

HSR Pizza Helper, a game tool App for Honkai: Star Rail on Apple platforms.
https://pizzastudio.org
GNU General Public License v3.0
63 stars 10 forks source link

[Review Board Req.] Defected in-app 3rd-party log-in services for HoYoLab accounts. #192

Closed ShikiSuen closed 2 months ago

ShikiSuen commented 3 months ago

该问题与天空岛&世界树伺服器帐号无关。

WKWebView 预设情况下不会响应任何可能会弹出新网页视窗的点击行为,这导致穹披助手 v1.3.5 macOS 版本首次送审时被拒绝。虽然审委会给出了宽限选项,但也只是一时。这个问题迟早要解决。

工作车间位于该分支:issues/wkWebViewPopups

眼下有两大思路:

  1. 正式支持该特性(尚未完成)。我稍微调整了一下 GetCookieWebView 做了一些 Coordinator 功能扩展,使其可以在当前页面载入新弹出的视窗的内容。然而,登入成功之后,无法从第三方服务返回 HoYoLab,于是抓不到 HoYoLab Cookie。只有返回了,才可能产生 HoYoLab Cookie。

  2. 注入 CSS 以隐藏掉用以显示第三方登入服务链接的网页章节片段。

问题是:HoYoLab 讨论区的域名是「www.hoyolab.com」、而登入视窗是个 iframe 且域名是「account.hoyolab.com」。这导致目前没有手段可以对 iframe 实现 CSS 跨站注入。(注入手段是 JavaScript,但 JavaScript 的 iframe 跨站注入通常不会被现代的浏览器所允许,所以连带导致 CSS 无法通过这个手段注入到 iframe 内。)

JS 手段:

document.getElementsByClassName("hyv-third-party-login-container-base")[0].remove();

CSS 手段(第二行参数内容):

let timer = setInterval(() => {
    var style = document.createElement('style');
    style.innerHTML = '.hyv-third-party-login-container-base{visibility:hidden;display:none;}';
    document.head.appendChild(style)
}, 300);
setTimeout(() => {clearInterval(timer);timer = null}, 100);
  1. 将登入网页由 HoYoLab 讨论区改为 account.hoyolab.com 再注入 CSS 以隐藏掉用以显示第三方登入服务链接的网页章节片段。

此举可行,但这个登入网页会带来用户体验灾难:

JS 手段(实测可行):

document.getElementsByClassName("mhy-3rd-plat-login")[0].remove();
image
ShikiSuen commented 2 months ago

A notice has been added to warn users that these features are not supported by this app.

Case temporarily closed.