0
$.getJSON("https://api.github.com/repos/theinfection/screencalculator.kdapp/contents/resources/version", function(data) {
    var currentVersion = decode64(data.content);

    $.get('./resources/version', function(dataVersion){
        var myVersion = dataVersion;

        if (currentVersion > myVersion) {
            $('.update').show();
        }
    });
});

代码说明

首先,我在我的 GitHub 存储库中获取了一个名为“version”的文件的内容(该文件中写入了“1.4.3”)。然后,由于 GitHub 将文件内容编码为 base64,我用另一个 JS 文件对其进行解码。这会将“currentVersion”变量设置为 1.4.3。

接下来,我调用服务器上的“版本”文件(其中写入了 1.4.2)。这会将“myVersion”变量设置为 1.4.2。

从那里,我比较两者。如果 currentVersion 大于 myVerison,则显示更新 DIV(在 CSS 中默认设置为“display:none;”)。

问题

当两个变量相等时,DIV 仍然显示。

问题

我应该怎么做才能避免这种情况发生?我应该如何使用 else 和 else if 语句来完成我想要的?

提前致谢!

4

3 回答 3

2

看起来您的问题可能是 1.4.2 和 1.4.3 不是数字,而是表示为字符串。您需要添加一些逻辑,例如按句点拆分字符串并检查子版本。

这是一篇关于将版本号与 JS 进行比较的帖子,可能会解决您的问题。

如何使用js比较软件版本号?(只有数字)

编辑

您可以使用我链接的帖子中的方法对您的版本进行比较

function version_compare(curVersion, myVersion) {
    var v1parts = curVersion.split('.');
    var v2parts = myVersion.split('.');

    for (var i = 0; i < v1parts.length; ++i) {
        if (v2parts.length == i) {
            return false;
        }

        if (v1parts[i] == v2parts[i]) {
            continue;
        }
        else if (v1parts[i] > v2parts[i]) {
            return false;
        }
        else {
            return true;
        }
    }

    if (v1parts.length != v2parts.length) {
        return true;
    }

    return false;
}

$.getJSON("https://api.github.com/repos/theinfection/screencalculator.kdapp/contents/resources/version", function(data) {
    var currentVersion = decode64(data.content);

    $.get('./resources/version', function(dataVersion){
        var myVersion = dataVersion;

        if (!version_compare(currentVersion,myVersion)) {
            $('.update').show();
        }
    });
});

我稍微修改了该方法以返回布尔值而不是版本更大的字符串。

于 2013-05-30T22:49:58.793 回答
0

这可以用作简单的版本比较器:

function Version(parse) {
this.version = parse.split('.');

this.compare = function(comp) {
    for(i = 0; i < this.version.length; i++) {
        if(this.version[i] < comp.version[i]) {
            return "older";
        }else if(this.version[i] > comp.version[i]) {
            return "newer";
        }
    }
    return "same";
};
};

var ver = new Version("1.2.5");
var ver2 = new Version("1.2.4");

console.log(ver.compare(ver2)); // newer
console.log(ver.compare(ver)); // same
console.log(ver2.compare(ver)); // older

您可以进行编辑,使其返回例如0,1true, false, 取决于您。

格利杜斯

于 2013-05-31T11:47:17.560 回答
0

我已经阅读了 DSlagle 的帖子,并在浏览了一些对 jsfiddle 有更改的评论后,在此处进行了一些更新。

http://jsfiddle.net/zshift/BCGSb/

    var currentVersion = decode64(data.content);
    alert('Current version: ' + currentVersion);
    //$.get('http://kasimahmic.koding.com/works/PPI/resources/version', function(dataVersion){
    var myVersion = '1.4.2';
    alert('Local version: ' + myVersion);

    if (currentVersion > myVersion) {
        alert('update available');
        $('.update').show();
    }
    else
        alert('no update available');

比较应该适用于来自服务器的数据,但这取决于您的本地资源文件返回的内容。由于访问控制权限,我们无法直接针对您的数据进行调试,因此我模拟了调用,并对这两个值使用 1.4.3 导致 DIV 未显示。将 'myVersion' 更改为 1.4.2 会导致它显示出来。我还添加了一些警报,以便更轻松地查看值和调试流程。

关于使用 jsfiddle 进行调试的另一个注意事项。使用 Chrome,您可以轻松地在 jsfiddle 中调试运行代码,只需打开开发人员工具,转到源选项卡,打开 fiddle.jshell.net,如果您的 fiddle 在http://jsfiddle.net/{id },则源文件应位于名为 {id}/show 的文件夹中。这是 jsfiddle 右下角的框架。您还可以检查页面并单击 iframe 中的链接,这会将您导航到相同的源窗口。从这里,您可以附加断点并使用实时数据进行调试。我之前没有提出这个问题的原因是您的代码在页面加载后立即运行,因此在页面加载后如果不调用单独的函数就无法实时观看。但认为它可能对将来的参考有用;)

在 chrome 中调试 jsfiddle

于 2013-05-31T03:40:14.017 回答