精华内容
下载资源
问答
  • js读取配置文件
    千次阅读
    2018-01-22 09:32:11

    js读取配置文件

    上传不了,总是说资源已经存在所以就只贴出路径了:https://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18n/

    这是官方的,不用积分哦!!!!楼主已经用过了,很给力!!!!

    更多相关内容
  • js读取配置文件自写

    2020-12-01 07:14:05
    自己写的用js读取配置文件的程序 D:\Useful Stuff\Javascript\mytest.txt 文件内容如下 代码如下: [plugin_page_search] wholeword=0 matchcase=1 hightlight=1 total=1 [data] up=85 down=5 代码如下: var fso = ...
  • JS读取配置文件

    2021-12-17 17:30:27
    项目前段框架:vue3 解决部署服务器环境改变,路径改变的问题。 解决方案,JS读取配置文件: 分别创建urlConfig.json文件,读取json文件的js文件。 json文件内容: js读取配置文件

    项目前段框架:vue3

    解决部署服务器环境改变,路径改变的问题。

    解决方案,JS读取配置文件:

    分别创建urlConfig.json文件,读取json文件的js文件。

    json文件内容:

     

    js读取配置文件

     

     

    展开全文
  • js读取properties文件

    2018-08-18 13:59:35
    js读取properties文件,很好用的。js读取properties文件,很好用的。js读取properties文件,很好用的。js读取properties文件,很好用的。
  • js:读取配置文件

    千次阅读 2021-06-12 17:44:05
    为了方便管理这些服务地址,让其他开发人员接手时也能明确项目中调用了哪些服务,引入配置文件显得很有必要。下方代码是实际项目的一份js文件,里面带了3个gis相关的地址;一旦需要更改必须全局搜索然后逐个文件去...

    前言 :gis开发中有很多地图url,直接写在各个js文件中,一旦需要修改(例如测试地址改为生产服务器上的arcgis服务地址)会非常麻烦。为了方便管理这些服务地址,让其他开发人员接手时也能明确项目中调用了哪些服务,引入配置文件显得很有必要。

    下方代码是实际项目的一份js文件,里面带了3个gis相关的地址;一旦需要更改必须全局搜索然后逐个文件去修改地址,非常麻烦。(其他项目示例代码,与后文改造代码无关)

    $(function () {

    initData();

    });

    function initData() {

    var touminigdu = 1;

    HXcommon.ajax('facilitymge/service/InfoDivide/GetInfo', {}, function (data) {

    var result = data.result;

    var html1 = '';

    var itemName = data.mainItem;

    var items = [];

    var no;

    for (var k = 0; k < itemName.length; k++) {

    if (itemName[k].mainBiz != '未划分') {

    items.push(itemName[k]);

    } else {

    no = itemName[k];

    }

    }

    items.push(no);

    itemName = items;

    for (var k = 0; k < itemName.length; k++) {

    var colorStr = itemName[k].color;

    var cs = colorStr.split(',');

    var color = [];

    for (var i = 0; i < cs.length; i++) {

    color.push(cs[i]);

    }

    html1 += '

    ' + itemName[k].mainBiz + '
    ';

    }

    $("#biz").html(html1);

    });

    }

    require([

    "esri/map", "esri/layers/FeatureLayer", "esri/geometry/Extent",

    "esri/symbols/SimpleFillSymbol", "esri/symbols/SimpleLineSymbol",

    "esri/renderers/SimpleRenderer", "esri/SpatialReference", "esri/graphic",

    "esri/layers/GraphicsLayer", "esri/lang",

    "esri/geometry/Polygon","esri/Color", "dojo/number", "dojo/dom-style",

    "dijit/TooltipDialog", "dijit/popup", "dojo/domReady!"

    ], function (Map, FeatureLayer, Extent,

    SimpleFillSymbol, SimpleLineSymbol,

    SimpleRenderer,SpatialReference, Graphic, GraphicsLayer, esriLang,

    Polygon,Color, number, domStyle,

    TooltipDialog, dijitPopup) {

    var map, dialog;

    var myDynamicMapServiceLayer;

    var contentSql = "''";

    map = new Map("mapDiv", {

    slider: false,

    logo: false,

    minScale: 61984.128,

    maxScale: 968.5019999999997,

    extent: new Extent({xmin: -100, ymin: -4000, xmax: 8000, ymax: 100, spatialReference: 3857})

    });

    var mapUrl = "http://10.10.5.155:6080/arcgis/rest/services/wireless/wirelessMap/MapServer";

    var featureUrl = "http://10.10.5.155:6080/arcgis/rest/services/wireless/wirelessMap/FeatureServer/1";

    var mapBasicLayer = new esri.layers.ArcGISDynamicMapServiceLayer(mapUrl);

    map.addLayer(mapBasicLayer);

    myDynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer(mapUrl);

    map.addLayer(myDynamicMapServiceLayer);

    var gLayerPolygon = new GraphicsLayer();

    map.addLayer(gLayerPolygon);

    var symbol = new SimpleFillSymbol();

    //填充色

    symbol.setColor(new Color([0, 0, 0, 0.25]));

    //边框颜色

    symbol.outline.setColor([255, 0, 0, 1]);

    symbol.outline.setWidth(3);

    var featureLayer = new esri.layers.FeatureLayer(featureUrl, {

    mode: esri.layers.FeatureLayer.MODE_ONDEMAND,

    outFields: ["*"]

    });

    var featureSymbol = new SimpleFillSymbol();//featureLayer加载空样式

    featureSymbol.setColor(new Color([255, 255, 255, 0])); //网格填充色设为空

    featureSymbol.outline.setColor([]);//边框颜色设为空

    featureLayer.setRenderer(new SimpleRenderer(featureSymbol));

    map.addLayer(featureLayer);//保持该图层在最上方 以便响应鼠标事件

    // map.infoWindow.resize(245,125);

    dialog = new TooltipDialog({

    id: "tooltipDialog",

    style: "position: absolute; width: 250px; font: normal normal normal 10pt Helvetica;z-index:100"

    });

    dialog.startup();

    map.on("load", function () {

    map.graphics.enableMouseEvents();

    map.graphics.on("mouse-out", closeDialog);

    map.graphics.on("click", hightlightGraphicClickHandler);

    });

    //移开鼠标 关闭信息框

    function closeDialog() {

    map.graphics.clear();

    dijitPopup.close(dialog);

    };

    //单击色块,弹出对应批文列表

    function hightlightGraphicClickHandler(evt) {

    console.log("频率信息是" + evt.graphic.attributes.CODE);

    var freqInfo = evt.graphic.attributes.CODE;

    HXcommon.layer.open('list.html?freqInfo=' + freqInfo, '批文列表', 'layer-fault-manage-txt', '1100', '570');

    }

    //色块鼠标移入添加高亮显示、信息框展示

    featureLayer.on("mouse-over", function (evt) {

    closeDialog();

    var t = "${TYPE}


    频率范围: ${CODE}
    "

    + "详细信息: ${DETAIL}
    ";

    var highlightSymbol = new SimpleFillSymbol(//鼠标滑过高亮显示样式

    SimpleFillSymbol.STYLE_SOLID,

    new SimpleLineSymbol(

    SimpleLineSymbol.STYLE_SOLID,

    new Color([255, 0, 0]), 1.5

    ),

    new Color([125, 0, 0, 0.3])

    );

    var content = esriLang.substitute(evt.graphic.attributes, t);

    var highlightGraphic = new Graphic(evt.graphic.geometry, highlightSymbol);

    highlightGraphic.setAttributes(evt.graphic.attributes);

    map.graphics.add(highlightGraphic);

    dialog.setContent(content);

    domStyle.set(dialog.domNode, "opacity", 0.85);

    dijitPopup.open({

    popup: dialog,

    x: evt.pageX,

    y: evt.pageY

    });

    });

    //点击某一类别的无线电按钮,高亮显示该类别所有色块

    $("#biz").on('click', 'span', function (evt) {

    closeDialog();

    map.setExtent(new Extent({xmin: -100, ymin: -4000, xmax: 8000, ymax: 100, spatialReference: 3857}));

    var queryName = ",'" + evt.currentTarget.innerText + "'";

    if ($(this).hasClass("cur")) {

    contentSql = contentSql.split(queryName)[0] + contentSql.split(queryName)[1];

    $(this).removeClass("cur");

    $(this).css("border", "2px solid transparent");

    } else {

    contentSql += queryName;

    $(this).addClass("cur");

    $(this).css("border", "green 1px solid");

    }

    var layerDefinitions = [];

    layerDefinitions[1] = "type in(" + contentSql + ")";

    myDynamicMapServiceLayer.setLayerDefinitions(layerDefinitions);

    if ("''" == contentSql) {//取消所有选中后恢复底图默认透明度

    mapBasicLayer.setOpacity(1);

    } else {

    mapBasicLayer.setOpacity(0.1);

    }

    });

    //点击定位按钮,频谱图定位到对应输入位置并标示范围(或单条竖线)

    $("#navigate").on('click', function (evt) {

    var startNumber,endNumber;

    var hzStr = $("#endunit").find("option:selected").text();

    var xyObj;

    if(""==$("#startfreq").val()){//无输入

    HXcommon.layer.alert("请输入频率值");

    }else if(""!=$("#startfreq").val()&&""==$("#endfreq").val()){//单一输入,线条展示

    startNumber = parseFloat($("#startfreq").val());

    if(isNaN(startNumber)){//不是数字,错误输入

    HXcommon.layer.alert("输入有误,请重新输入数值");

    return;

    }else{//正确输入了单一数值

    xyObj = getXYvalue(hzStr, startNumber, startNumber);

    creatGraphic(xyObj);

    }

    }else if(""!=$("#startfreq").val()&&""!=$("#endfreq").val()){//范围区域面展示

    startNumber = parseFloat($("#startfreq").val());

    endNumber = parseFloat($("#endfreq").val());

    if(isNaN(startNumber)||isNaN(endNumber)){//不是数字,错误输入

    HXcommon.layer.alert("输入有误,请重新输入数值");

    return;

    }else{//正确输入了两个数值

    xyObj = getXYvalue(hzStr, startNumber, endNumber);

    creatGraphic(xyObj);

    }

    }

    });

    function getXYvalue(hzStr, startNumber, endNumber) {

    var xEnd = 0;

    var yValue = 0;

    var subtotal = 0;//每条频谱图代表频点范围数值

    var ownNumber;//所属第几行数据

    if (hzStr.toLowerCase() === "khz") {//1、2两行数据

    if (endNumber <= 300) {//第1行数据

    yValue = 20;

    ownNumber = 1;

    subtotal = 300;

    } else if (startNumber >= 300 && endNumber <= 3000) {//第2行数据

    yValue = -470;

    ownNumber = 2;

    subtotal = 3000 - 300;

    } else if (startNumber > 3000) {//eg:21000.000kHz~21450.000kHz,表达为21MHz~21.45MHz,归入第三行显示

    yValue = -980;

    ownNumber = 3;

    subtotal = 30 - 3;

    startNumber = startNumber / 1000;

    endNumber = endNumber / 1000;

    }

    } else if (hzStr.toLowerCase() === "mhz") {//3、4、5行数据

    if (startNumber >= 3 && endNumber <= 30) {//第3行数据

    yValue = -980;

    ownNumber = 3;

    subtotal = 30 - 3;

    } else if (startNumber >= 30 && endNumber <= 300) {//第4行数据

    yValue = -1495;

    ownNumber = 4;

    subtotal = 300 - 30;

    } else if (startNumber >= 300 && endNumber <= 3000) {//第5行数据

    yValue = -2008;

    ownNumber = 5;

    subtotal = 3000 - 300;

    } else if (startNumber > 3000) {//eg:5780.000MHz~5780.000MHz,表达为5.78GHz~5.78GHz,归入第6行显示

    yValue = -2520;

    ownNumber = 6;

    subtotal = 30 - 3;

    startNumber = startNumber / 1000;

    endNumber = endNumber / 1000;

    }

    } else if (hzStr.toLowerCase() === "ghz") {//6、7两行数据

    if (startNumber >= 3 && endNumber <= 30) {//第6行数据

    yValue = -2520;

    ownNumber = 6;

    subtotal = 30 - 3;

    } else if (startNumber >= 30 && endNumber <= 1000) {//第7行数据

    yValue = -3034;

    ownNumber = 7;

    subtotal = 280 - 30;

    }

    } else {//错误数据,传入数据格式不正确

    console.warn("错误数据,检查数据格式是否带单位");

    }

    var startObj = getXAndName(startNumber, ownNumber);

    var xStart = startObj.closestX + 7960 * (startNumber - startObj.closestName) / subtotal;

    if (startNumber === endNumber) {//一条线

    xEnd = xStart;

    } else {//矩形,需要查询构成矩形下一个点的x坐标

    var endObj = getXAndName(endNumber, ownNumber);

    xEnd = endObj.closestX + 7960 * (endNumber - endObj.closestName) / subtotal;

    }

    return {xStart: xStart, xEnd: xEnd, y: yValue};

    }

    //查询后台最近点坐标并返回该最近点对应的x坐标与频点信息(name字段)

    function getXAndName(name, ownNumber) {

    var closestX = 0;//最近点x坐标

    var closestName = 0;//最近点频点值

    $.ajax({

    type: "GET",

    url: "http://10.10.5.155:8080/gisMap/wireless/getCoordinates/" + name + "/" + ownNumber,

    dataType: "json",

    async: false,

    success: function (obj) {

    console.log("--ok get it " + obj[0]);

    closestX = Number(obj[0].x);

    closestName = Number(obj[0].name);

    },

    error: function () {

    console.log("请求错误");

    closestX = "error";

    closestName = "error";

    HXcommon.layer.alert("输入范围跨度太大");

    }

    });

    return {

    closestX: closestX,

    closestName: closestName

    };

    }

    function creatGraphic(xyObj) {

    gLayerPolygon.clear();

    if(isNaN(xyObj.xStart)){//返回错误,不是数值的x

    map.setExtent(new Extent({xmin: -100, ymin: -4000, xmax: 8000, ymax: 100, spatialReference: 3857}));

    return;

    }

    mapBasicLayer.setOpacity(0.7);

    //绘制多边形

    var polygon = new Polygon(new SpatialReference({wkid: 3857}));

    var YMOVE = 540;

    var x1 = xyObj.xStart;

    var y1 = xyObj.y;

    var x2 = xyObj.xEnd;

    var y2 = y1;

    var x3 = xyObj.xEnd;

    var y3 = y1 - YMOVE;

    var x4 = x1;

    var y4 = y1 - YMOVE;

    polygon.addRing([[x1, y1], [x2, y2], [x3, y3], [x4, y4], [x1, y1]]);

    var graphic = new Graphic(polygon, symbol);

    gLayerPolygon.add(graphic);

    // map.setScale(Number(map.getScale()) / 4);

    map.centerAt(polygon.getExtent().getCenter());

    };

    //清除

    $("#clerGraphic").on('click', function (evt) {

    gLayerPolygon.clear();

    map.setExtent(new Extent({xmin: -100, ymin: -4000, xmax: 8000, ymax: 100, spatialReference: 3857}));

    })

    });

    END 前言结束

    1 新建一个gisConfig.json文件,写入相关的地址(此处只写了一个地址测试用),存放在config目录下。

    76ff1083ccfc

    image.png

    2 新建mapLoader.js,在html页面业务代码js文件前引入;在此编写读取配置文件代码

    76ff1083ccfc

    image.png

    var HXDIGIS = {};

    HXDIGIS.MapLoader = function(opt_options) {

    this.gisConfig_ = null;

    this.loadConfig_();

    };

    $.extend(HXDIGIS.MapLoader.prototype, {

    loadConfig_: function() {

    var me = this;

    $.ajax({

    async: false,

    url: "configs/gisConfig.json",

    type: 'GET',

    dataType: 'json',

    }).done(function(data) {

    me.gisConfig_ = data;

    }).fail(function(data, status, desc) {

    alert("无法获取配置信息或配置信息有误!");

    throw new Error(status + "\n" + desc);

    });

    },

    getGISConfig: function() {

    return this.gisConfig_;

    }

    });

    3 修改原有的调用代码,改为从配置文件读取到的url地址

    var maploader = new HXDIGIS.MapLoader();

    var gisConfig = maploader.getGISConfig();

    var baseMapUrl = gisConfig["Map"]["baseMapUrl"];

    // var baseMapUrl = "http://10.10.1.122:6080/arcgis/rest/services/tile/gaodeTile/MapServer";

    var baseLayer = new ArcGISTiledMapServiceLayer(baseMapUrl);

    map.addLayer(baseLayer);

    END 结束示例

    上述写法引入了HXDIGIS这一全局变量,而且必须在html页面中引入读取配置文件的js文件。利用dojo的js模块化开发改进这一功能,具体步骤如下:

    1新建模块,存放在myMoudles文件夹下

    76ff1083ccfc

    image.png

    模块内代码如下 MapLoader.js

    define([], function() {

    var MapLoader = function(opt_options) {

    this.gisConfig_ = null;

    this.loadConfig_();

    };

    $.extend(MapLoader.prototype, {

    loadConfig_: function() {

    var me = this;

    $.ajax({

    async: false,

    url: "configs/gisConfig.json",

    type: 'GET',

    dataType: 'json',

    }).done(function(data) {

    me.gisConfig_ = data;

    }).fail(function(data, status, desc) {

    alert("无法获取配置信息或配置信息有误!");

    throw new Error(status + "\n" + desc);

    });

    },

    getGISConfig: function() {

    return this.gisConfig_;

    }

    });

    return MapLoader;

    }

    );

    2 在主页面html文件中配置本地模块的路径,注意,这段配置代码需要写在引入arcgis js api的init.js文件之前

    pointMap

    html, body, #mapdiv {

    height: 100%;

    width: 100%;

    margin: 0;

    padding: 0;

    }

    href="http://10.10.5.155:8080/arcgis_js_api_3.20/library/3.20/3.20/esri/css/esri.css"/>

    parseOnLoad: true,

    packages: [{

    "name": "myModules",

    "location": location.pathname.replace(/\/[^/]+$/, "") + "/js/myModules"

    }]

    };

    3 代码中调用

    76ff1083ccfc

    image.png

    展开全文
  • node.js读取ini格式的文件

    概述

    有时候我们需要将一些参数写入文件中,如.ini配置文件,但实际上不一定是.ini后缀的文件,但只要文件内容符合ini配置文件的格式,就可以通过接下来我们要说的ini包进行读取。

    安装

    安装:

    npm install --save ini
    

    引入:

    var ini=require('ini');
    

    使用

    基本语法

    /**
     * 参数:
     *  - str:ini格式的文件内容,字符串格式
     * 返回值:
     *  - info:返回一个包含ini格式文件所有节点和键值对的对象
     */
    var info = ini.parse(str);
    

    实例

    trash.conf:一个符合ini格式的配置文件。

    [base]
    url=http://www.baidu.com
    path=/root/home
    user=root
    password=root
    

    test.js:解析ini格式文件的实例代码。

    // 0.引入ini包
    var ini = require('ini');
    var fs = require('fs');
    
    // 1.使用fs模块读取配置文件。注:readFileSync()方法返回一个Buffer,需要转换成字符串使用toString()方法
    var str = fs.readFileSync(__dirname + "\\trash.conf").toString();
    
    // 2.使用ini.parse()方法进行转换
    var info = ini.parse(str);
    
    // 3.获取对象中的信息
    var base = info['base'];// 获取base节点对象,该对象包含节点下的所有键值对
    console.log(base.url);// 获取名为url的键对应的值
    console.log(base.path);
    console.log(base.user);
    console.log(base.password);
    

    该文件使用ini包提取的结果对象为:

    [Object: null prototype] {
      base: [Object: null prototype] {
        url: 'http://www.baidu.com',
        path: '/root/home',
        user: 'root',
        password: 'root'
      }
    }
    
    展开全文
  • 代码分离:配置项不仅可以从配置文件读取, 也可以从环境变量读取,使得安全隐秘的配置项与代码分离 易于使用:配置项应该是分层配置的,有助于查找条目和维护庞大的配置文件的,应该是容易组织和容易获取的,比如...
  • js读取properties配置文件

    千次阅读 2017-12-13 18:04:00
     js读取properties配置文件,大多数的方法都是引入一个 jQuery 的插件jquery.i18n.properties,不可否认,确实可行,下面就让我们来看下具体的使用。  涉及到的js可从该网址的示例代码中下载获得:  ...
  • JAVA读取整个配置文件,装载到一个map resources——config——prop——map /*初始化加载aliPropertiesMap*/ public void init(Map, String> map) { try { //加载resource文件(也可以加载resources) Resource ...
  • js读取配置文件(理解版)

    千次阅读 2015-09-07 15:41:42
    网上搜的js读取配置文件都能搜到的: 配置文件放在本地的磁盘中: D:\Useful Stuff\Javascript\mytest.txt 文件内容形式如下(形式关乎正则表达式如何匹配,=号前后的空格都会导致匹配失败): [plugin_page_...
  • Vue:从文件读取配置

    2022-01-12 16:26:49
    1.在src目录下建立一个util目录,并在其中建立config.js let username='amadeus_liu' ...2.在.vue文件中引入上述配置文件: import {username} from "../util/config" 3.在代码中使用username的值 ...
  • js读取配置文件 文章目录js读取配置文件一、准备工作二、配置文件三、js实现 一、准备工作 需要的js插件包括jquery.i18n.properties.js、jquery-3.3.1.min.js 二、配置文件 配置文件内容格式是map类型的:key = ...
  • nodejs读取配置文件

    千次阅读 2018-01-25 16:47:00
    INI.js(模块) var eol = process.platform === "win32" ? "\r\n" : "\n" function INI() { this.sections = {}; } /** * 删除Section * @param sectionName */ INI....
  • new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.js...
  • JavaScript读取本地文件

    2021-07-09 16:06:46
    html网页,使用input元素设置type=“flie” 文件类型,获取本地csv文件,在javascript中使用FileReader读取文件内容 创建html文件 <!doctype html> <html lang="en"> <head> <meta charset=...
  • 项目中经常用到的配置文件,除了XML文件之外,还会用到Properties文件来存储一些信息,例如国际化的设置、jdbc连接信息的配置等。有时候也会把一些路径或者sql语句放到Properties中,这样就不用直接在Java代码中放置...
  • Go beego/config读取配置文件

    千次阅读 2021-12-13 17:15:23
    go语言使用beego/config模块读取配置文件 配置文件:conf.ini // conf.ini [logs] log_level=debug log_path=./logs/lagagent.log [collect] log_path=/home/work/nginx/access.log topic=nginx_log main.go ...
  • 这代表异步JavaScript和XML,但XML部分是完全可选的,它可以用于各种内容类型(包括纯文本)。 (对于这个问题,异步部分是可选的为好,但它的最好坚持这一点。)下面是使用AJAX请求的文本文件中的数据的一个基本的例子...
  • 原生js读取json文件

    千次阅读 2021-08-05 05:21:40
    demo.json[{"name":"张三","sex":"男","email":"zhangsan@123.com"},{"name":"李四","sex":"男","email":"lisi@123.com"},{"name":"王五","sex":"女","email":"wangwu@123.com"}]2.js读取json文件window.onload...
  • 有时我们需要配置文件如下: db.conf { " host " : " 127.0.0.1 " , " password " : " 3306 " , " timeout " : 1000 } 但是,当我们管理越来越多的服务器和服务时,如果我们需要更改密码或IP,那就是一场灾难...
  • JavaScript////嵌入CDATA段可以防止不兼容Javacript的浏览器不产生错误信息//增加正则表达式String.prototype.getQueryString = function(name) {var reg = new RegExp("(^|&|\\?)" + name + "=([^&]*)(&...
  • 新手如何使用JavaScript读取json文件

    千次阅读 2020-03-30 10:24:24
    使用JavaScript读取json文件前言正式开始前提条件终于可以开始了全部代码 前言 最近尝试使用js读取json文件,并调用json的数据。在网上找到各种大佬写的教程,拷贝到自己电脑上就各种报错,对于新手来说不太友好。...
  • vue读取外部配置文件

    2021-10-25 15:17:51
    在public中创建static文件夹,在static文件夹中创建config.js文件 2.创建完成在public中的index.html引入 <script src="./static/config.js"></script> 3.在config.js写入 window.server = { // ...
  • js读取远程文件服务器

    千次阅读 2021-08-08 09:19:52
    js读取远程文件服务器 内容精选换一换远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议。本节为您介绍如何使用RDP文件远程登录Windows弹性云服务器。从管理控制台下载的RDP文件对应...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,275
精华内容 62,510
关键字:

js读取配置文件

友情链接: SPWM .rar