HTML和JavaScript写的代码用于转换SS的配置文件

如题 可以将SS手机版的配置文件转换到电脑版来用

     也可以将SS电脑版的配置文件转换到手机版来用



<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" />
<script language="JavaScript" type="text/javascript" src="cryptico.browser.js"></script>
<title>SS配置文件转换</title>
</head>

<body>
<script type="text/javascript">
	function b256to64(t) {
    var base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

        var a, c, n;
        var r = '', l = 0, s = 0;
        var tl = t.length;
        for (n = 0; n < tl; n++)
        {
            c = t.charCodeAt(n);
            if (s == 0)
            {
                r += base64Chars.charAt((c >> 2) & 63);
                a = (c & 3) << 4;
            }
            else if (s == 1)
            {
                r += base64Chars.charAt((a | (c >> 4) & 15));
                a = (c & 15) << 2;
            }
            else if (s == 2)
            {
                r += base64Chars.charAt(a | ((c >> 6) & 3));
                l += 1;
                r += base64Chars.charAt(c & 63);
            }
            l += 1;
            s += 1;
            if (s == 3) s = 0;
        }
        if (s > 0)
        {
            r += base64Chars.charAt(a);
            l += 1;
            r += '=';
            l += 1;
        }
        if (s == 1)
        {
            r += '=';
        }
        return r;
    }

    function b64to256(t) 
    {
    var base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

        var c, n;
        var r = '', s = 0, a = 0;
        var tl = t.length;
        for (n = 0; n < tl; n++)
        {
            c = base64Chars.indexOf(t.charAt(n));
            if (c >= 0)
            {
                if (s) r += String.fromCharCode(a | (c >> (6 - s)) & 255);
                s = (s + 2) & 7;
                a = (c << s) & 255;
            }
        }
        return r;
    } 


function SSProfile(configs, localPort, shareOverLan)
{
    if (configs != null && configs.length > 0)
    {
		this.configs = configs;
		this.localPort = localPort;
		this.shareOverLan = shareOverLan;
    }
    else throw new Error("Invalid SSProfile");
}

function SSConfigs(server, server_port, password, method, remarks, auth)
{
    if (server != null && server_port != null && method != null && password != null
		&& server.length > 0 && server_port.length > 0 && method.length > 0 && password.length > 0)
    {
		this.server = server;
		this.server_port = server_port;
		this.password = password;
		this.method = method;
		this.remarks = remarks;
		this.auth = auth;
    }
    else throw new Error("Invalid SSConfigs");
}

function JSONParse(SSConfigsString) {
    var json = JSON.parse(SSConfigsString);
	var configs=json.configs;
	var arrayProfile = "";
	for(var i=0;i<configs.length;i++){
		var temp=configs[i].method+":"+configs[i].password
		+"@"+configs[i].server+":"+configs[i].server_port;
	//alert(temp);
		arrayProfile += "ss://"+b256to64(temp)+"\n";
	}

    return arrayProfile;
}	

function parseJSON(SSConfigsString) {
    var strArr = SSConfigsString.split("\n");
	var configs = new Array();
	for(var i=0;i<strArr.length;i++){
		var tempStr = strArr[i];
		//alert(tempStr);
		var tempStr2 = null;
		if(tempStr!=null && tempStr!="" && tempStr.startWith("ss://")){
		//alert(tempStr);
			tempStr = tempStr.substr(5,tempStr.length);
		//alert(tempStr);
			tempStr = b64to256(tempStr);
		//alert(tempStr);
			var tempArr = tempStr.split("@");
			if(tempArr!=null && tempArr.length>1){
				tempStr = tempArr[0];
				tempStr2 = tempArr[1];
			}
			var server, server_port, password, method;
			tempArr = tempStr.split(":");
			if(tempArr!=null && tempArr.length>1){
				method = tempArr[0];
				password = tempArr[1];
			}
			tempArr = tempStr2.split(":");
			if(tempArr!=null && tempArr.length>1){
				server = tempArr[0];
				server_port = tempArr[1];
			}
			//alert("手机转电脑:"+server+"--"+(i+1));
			var mConfigs = new SSConfigs(
				server, server_port, password, method, "手机转电脑:"+server+"--"+(i+1), false);
			//alert(mConfigs.server);
			configs.push(mConfigs);
			//alert(configs[i].server_port);
		}
	}
	var mSSProfile = new SSProfile(configs, 1080, false)
	//alert(mSSProfile.configs[0].server_port);
    return JSON.stringify(mSSProfile);
}	
String.prototype.startWith=function(str){  
	if(str==null||str==""||this.length==0||str.length>this.length)  
		return false;  
	if(this.substr(0,str.length)==str)  
		return true;  
	else  
		return false;  
	return true;  
} 

function m2c(){
	//alert("1");
	var theSSProfile=document.getElementById("mProfile").value;
	//alert("2");
	var mSSProfile = parseJSON(theSSProfile);
	//alert("3");
	document.getElementById("textOut").value = mSSProfile;
}

function c2m(){
	//alert("1");
	var theSSProfile=document.getElementById("mProfile").value;
	//alert("2");
	var mSSProfile = JSONParse(theSSProfile);
	//alert("3");
	document.getElementById("textOut").value = mSSProfile;
}

function textShow(fileElementId, textElementId){
	var file=document.getElementById(fileElementId).files[0];
	if(file){
		var reader=new FileReader();
		reader.οnlοad=function(e){
			var conb=document.getElementById(textElementId);
			conb.innerHTML=e.target.result;
		}
	}
	reader.readAsText(file);
}
</script> 
<p>点击下方按钮选择你的配置文件:<br/><input type="file" style='font-size:20px' name="theSSProfile" id='theSSProfile' οnchange='textShow("theSSProfile","mProfile")'/></p>
<textarea name="mProfile" rows="5" cols="30" id="mProfile"></textarea>
<p><button style='font-size:20px' οnclick="m2c()">手机转电脑</button>  
<button style='font-size:20px' οnclick="c2m()">电脑转手机</button></>
<p>下框将会输出转换后的内容:<br/>
<textarea name="textOut" rows="5" cols="30" id="textOut"></textarea></>
<p id="msg"></p>
<p>电脑转手机的步骤如下:<br/>
1:选择你的配置文件 也就是:gui-config.json<br/>
2:点击 电脑转手机 按钮<br/>
3:将转换后的内容复制下来然后粘贴到文本文档中<br/>
4:将文本文档通过蓝牙或者数据线发送到手机上<br/>
5:手机上打开文本文档并将其中的内容全部复制下来<br/>
6:手机上打开SS 添加配置文件的时候选择"从剪贴板导入"<br/><br/>
手机转电脑的步骤如下:<br/>
1:手机上打开SS 点击右上角的那个按钮 将配置文件导出到剪贴板<br/>
2:手机上用浏览器打开本程序<br/>
3:将剪贴板中的内容粘贴到上面第一个方框中<br/>
4:点击 手机转电脑 按钮<br/>
5:将转换后的内容复制下来然后粘贴到文本文档中<br/>
6:将文本文档通过蓝牙或者数据线发送到电脑上<br/>
7:将文本文档重命名为:gui-config.json<br/>
8:将gui-config.json剪切并粘贴到电脑上SS的那个文件夹里</p>
</body>
</html>


Vue.js 是一种用于构建用户界面的渐进式前端框架,由尤雨溪创建,并通过社区维护。虽然 Vue 自身并不直接处理数据格式化任务,但它能够很好地与其他库结合使用,如 moment.js 或 vue-filter 转换器插件,来进行日期时间格式化的操作。 对于时间 `yyyy-mm-dd HH:MM:ss` 的格式转换,通常需要借助 JavaScript 的内置方法或者专门的数据处理库。下面是如何使用 Vue.js 结合 moment.js 进行时间格式转换的一个示例: 首先,你需要安装并导入 moment.js 和一个 Vue.js 指令插件(例如 vue-filter),用于处理时间格式化功能: ```html <!-- 引入 moment.js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script> <!-- 引入 vue-filter 插件,这里假设已经配置好了 --> <script src="path/to/vue.filter.js"></script> <!-- 使用自定义指令进行时间格式化 --> <script> import { format } from 'vue.filter'; // 假设这个是用于时间格式化的过滤器 export default { data() { return { dateStr: "2023-04-05 12:30:45", // 示例字符串时间 }; }, filters: { formatDate(value) { const date = moment(value); return date.format('YYYY-MM-DD HH:mm:ss'); // 格式化为 yyyy-mm-dd hh:mm:ss }, }, }; </script> ``` 在这个例子中: 1. **引入** `moment.js`: 这是一个强大的日期时间操作库。 2. **引入** `vue-filter.js`: 需要这个文件是因为我们要使用一个过滤器来自定义日期格式化。如果你没有这样的插件,你可以自己编一个简单的过滤器或者使用其他如 `lodash` 提供的 `_.template()` 函数来实现类似的转换。 3. **使用`formatDate`过滤器**: 将 `dateStr` 数据属性传递给该过滤器,并应用到对应的 HTML 元素上。例如,在 `<p>` 标签内设置 `v-text="dateStr | formatDate"` 可以将原始字符串格式转换为 `'yyyy-mm-dd hh:mm:ss'` 格式。 ```html <p>{{ dateStr | formatDate }}</p> ``` 最后,运行此应用程序并将页面刷新,可以看到原始时间字符串已成功转换成指定格式。这种方式使得 Vue 应用程序可以轻松地展示和操作日期时间数据。 -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值