我试图使用sub_过滤器来替换.js文件中的代码片段。
SYNO.SDS.AzureSSOUtils = function() {
var a = 600
, c = 500
, e = (screen.width / 2) - c / 2
, d = (screen.height / 2) - a / 2
, b = String.format("height={0},width={1},left={2},top={3}", a, c, e, d);
return {
login: function(l, i) {
var f = (function(m) {
l(i, m)
}
).createDelegate(this);
var g = _S("dsm_https_port");
var k = Ext.urlEncode({
action: "signin",
method: "azure_oidc",
origin: location.origin
});
var j = location.hostname;
var h = "https://" + j + ":" + g + "/webman/index.cgi?" + k;
window.addEventListener("message", f);
window.open(h, "OIDC", b)
},
logout: function() {
var g = Ext.urlEncode({
asso: "true"
});
var f = "webman/logout.cgi?" + g;
window.open(f, "OIDC", b)
}
}我成功地使用sub_filter替换了简单的片段
例如,所有这些示例都能很好地工作,并替换我所期望的:
sub_filter 'dsm_https_port' '443';
sub_filter "dsm_https_port" "443";
sub_filter 'SYNO.SDS.AzureSSOUtils' 'PleaseWorkDamnYou'我真正想做的是这两种替代品之一:
sub_filter 'var g = _S("dsm_https_port");' 'var g = 443;';
or
sub filter 'var h = "https://" + j + ":" + g + "/webman/index.cgi?" + k;' 'var h = "https://" + j + + "/webman/index.cgi?" + k;'; 然而,这两种方法似乎都没有起到任何作用。我试着转义每个空格,引号和分号,把\放在它们前面--虽然这没有错误,但没有什么区别。
我做错了什么?我认为这是因为要替换的文本中有模糊的字符,但我不确定。
作为参考,是的,我确保在我的位置部分中启用了以下内容(这是大多数文章所建议的,首先,所有这些都需要能够编辑正在工作的小片段:
gzip off;
proxy_set_header Accept-Encoding "";
sub_filter_once off;
sub_filter_types *;发布于 2020-09-14 19:02:11
好的,这完全是我的错误(来自于不是一个程序员)。
我使用chrome的开发工具查看浏览器使用的网络选项卡中的预览功能下载的desktop.js文件。这使得代码很漂亮。我从来没有想过,它会在感觉良好的地方插入空间。
我在本地下载了desktop.js文件,没有格式化,结果发现,我想替换的文本是var g=_S("dsm_https_port")而不是var g = _S("dsm_https_port");。
和var h="https://"+j+":"+g+"/webman/index.cgi?"+k而不是var h = "https://" + j + ":" + g + "/webman/index.cgi?" + k
一旦我修复了空格问题并使用了转义字符,一切都按预期工作了(我以前尝试过转义,但空格问题是阻止我的根本问题)。
不要看经过修饰的代码,看看服务器返回给浏览器的原始文件。
为了完整地回答,这是最后一个有效的sub_filter:
sub_filter 'var g=_S(\"dsm_https_port\")' 'var g=443';
谢谢大家的评论,这很有帮助。
https://serverfault.com/questions/1033761
复制相似问题