iBug/pac

shadowsocks-windows 4.1.9.2修改了PAC逻辑判断,导致该项目无法正常工作

Closed this issue · 12 comments

shadowsocks/shadowsocks-windows#2761

相关issue,等maintainer修

iBug commented

暂时解决办法是手动把代码里的 __PROXY__ 换成 "127.0.0.1:1080",我觉得这种兼容性问题还是上游修一下比较好

暂时解决办法是手动把代码里的 __PROXY__ 换成 "127.0.0.1:1080",我觉得这种兼容性问题还是上游修一下比较好

是的,只能等maintainer发下一个版本

事实上打算把新版本行为作为标准固定下来……当然,需要进一步讨论也欢迎进一步讨论。以下代码或许可以用于兼容两个版本的API(十分钟写出来的,没测试)

var proxy = "__PROXY__";

function OldAPI(){
	try{
		eval("__PROXY__;")
		// old api => SOCKS5 127.0.0.1:1080
		// new api => __PROXY;
		return false;
	}catch(e){
		return true;
	}
}

if(!OldAPI()){
	eval("proxy = __PROXY__;");
}

之所以不修并且打算定标准: shadowsocks/shadowsocks-windows#2766 (comment)
参与定标准:shadowsocks/shadowsocks-windows#2746

bbq69 commented

之所以不修并且打算定标准: shadowsocks/shadowsocks-windows#2766 (comment)
参与定标准:shadowsocks/shadowsocks-windows#2746

could you please add me in wechat and guide me what i should do, i am noob to this and no nothing about coding. anyone just help me out here, it is not working well for me after recent update. my wechat ID: vikram_ag , thanks a lot

iBug commented

考虑到 PAC 脚本就是 JavaScript,我用了个新办法检查 SS-Win 4.1.9:

pac/code.js

Lines 37 to 40 in 290db40

// Attempt to catch Shadowsocks-Windows 4.1.9
if (typeof __PROXY__ !== "undefined") {
proxy = __PROXY__;
}

还是希望有人能帮忙测试一下新的代码

如果没记错,老版本会将所有__PROXY__替换成代理地址,你实际执行的是:

 if (typeof SOCKS 127.0.0.1:1080 !== "undefined") { 
   proxy = SOCKS 127.0.0.1:1080; 
 } 
iBug commented

@studentmain 谢谢提醒,我换了个办法实现,加了个选项在生成的时候把 "__PROXY__" 直接替换成 __PROXY__ (去掉了引号),这样应该没问题吧?

iBug/iBug-source@179df88

也是个办法,我写的那段js主要是魔法比较多

可以参考ssr的pac那样的办法

var proxy = '__PROXY__';
if (proxy === '__PRO'+'XY__')
    proxy = __PROXY__;

4.1.9之前第一句会替换,第二句不成立;4.1.9之后第二句成立,走第三句。

emmmm会因为proxy=PROXY 127.0.0.1:1080;产生语法错误

可以用proxy = eval('__PRO'+'XY__')

iBug commented

@imba-tjd 我觉得你这个操作也够魔法的,目前决定还是用复选框直接在生成阶段修改代码吧(见网页)

image

实际修改就是把源代码里带双引号的 "__PROXY__" 都替换成了不带双引号的 __PROXY__,个人认为这个办法足够好了。