Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Yesterday17 opened this issue Apr 18, 2020 · 2 comments
Closed

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

Yesterday17 opened this issue Apr 18, 2020 · 2 comments

Comments

@Yesterday17
Copy link

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 应该也可以这么改(

存在的问题

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

  • 第一种方案是直接对所有对应不支持跨域的网站强制允许跨域,即通过对应工具的增加 header 功能给实现。这种方案的问题在于潜在的安全问题,其完全背离了禁止跨域请求的初衷。
  • 第二种方案是模拟 GM_xmlhttpRequest 函数,将其请求的地址修改为一个特定的格式,发送到同域下一个不存在的地址,由额外的脚本识别这种格式后解析出原本的请求、请求并返回。这种方案的问题在于需要引入新的脚本,可能会降低一定的运行效率。

效果

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

SkyLeap

image

Chrome

image

Safari

效果差不多所以没截图(

@biuuu
Copy link
Owner

biuuu commented Apr 18, 2020

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

@Yesterday17
Copy link
Author

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

@biuuu biuuu closed this as completed Apr 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants