biuuu / BLHXFY

碧蓝幻想翻译
MIT License
276 stars 124 forks source link

iOS 脚本注入的另外一种解决方案 #322

Closed Yesterday17 closed 4 years ago

Yesterday17 commented 4 years ago

iOS 平台上有许多网络调试工具,而这些调试工具很多都可以做到直接修改 http 请求,因此可以考虑使用这些工具进行脚本的注入,这样在任何条件下都可以正常汉化了。

以 Surge 为例(QuantumultX 操作类似)

Surge 在 2019 年中旬引入了脚本系统,其可以对 http(s) 请求作直接修改,因此我们可以利用这一点将汉化脚本注入到 </head> 之前执行。简单的脚本如下:

function insert(str, index, value) {
  return str.substr(0, index) + value + str.substr(index);
}

const toInsert = `
<script>
(function () {
  const script = document.createElement("script");
  script.src = "https://blhx.danmu9.com/blhxfy/extension.user.js";
  document.head.appendChild(script);
})();
</script>
`;

let { body, headers } = $response;
const result = {};

if (
  body &&
  headers &&
  typeof headers["Content-Type"] === "string" &&
  headers["Content-Type"].includes("text/html") &&
  body.lastIndexOf("</head>") !== -1
) {
  result.body = insert(body, body.lastIndexOf("</head>"), toInsert);
  result.headers = headers;
}

$done(result);

并且设置匹配的 URL 为 (game\.granbluefantasy\.jp)|(gbf\.game\.mbga\.jp) 即可。

其他示例(包括 TestFlight 版本中新引入的模块功能)详见此

(顺带提一句 SC 应该也可以这么改(

存在的问题

注入存在的问题就是跨域。这里有两种解决方案:

效果

测试环境为 iOS 13.3.1(iPad mini 5),Surge 版本为 4.10.0(1582),使用的是上面链接中对应的模块(Module),效果如下图所示:

SkyLeap

image

Chrome

image

Safari

效果差不多所以没截图(

biuuu commented 4 years ago

这个方案不错啊, 不过可能没办法和其他游戏加速App一起使用。

Yesterday17 commented 4 years ago

确实,不过 Surge/QX 本来就是科学工具了,如果用的节点的话就可以直接用了(