电子-另一个程序正在使用此文件吗?

问题描述 投票:1回答:1

我创建了一个搜索栏,用于搜索JSON并使用“打开链接”按钮以html显示信息。这些文件是本地kmz / kml文件,当用户单击按钮时,这些文件会在Google地球中打开。

为什么当我单击打开按钮时,Google Earth会加载它,然后在我的应用程序中收到一个弹出窗口,提示“当前有另一个程序正在使用该文件”,然后在我重新启动该应用程序之前无法清除?

$(document).ready(function() {
    $('#myInput').keyup(function() {
        $('#aceCategory').html('');
        var searchField = $('#myInput').val();
        var expression = new RegExp(searchField, "i");
        $.getJSON('jsoncleanmaster.json', function(data) {
            $.each(data, function(key, value) {
                if (value.category.search(expression) != -1 ||
                    value.name.search(expression) != -1 ||
                    value.desc.search(expression) != -1 ||
                    value.url.search(expression) != -1) {
                    $('#aceCategory').append("<tr>" + "<td>" + "<b>" +
                        value.name + "---" + "(" + value.category + ")" + "</b>" + "<br>" +
                        value.desc + "</br>" + "<input type='button' id='openBtn1' style='border-radius: 25px; outline: none' value='Open Link'  >" +
                        "</td>" + "</tr")
                    const shell = require('electron').shell;
                    $(document).on("click", "#openBtn1", function(event) {
                        shell.openItem(value.url);
                    })
                }

            });
        })

    });
});
javascript html json electron google-earth
1个回答
0
投票

您的点击事件可能多次触发。如果是这样,可以在jQuery click events firing multiple times处找到一个可能的解决方案。不过,很快的答案是,如果您打算稍后重新启用该按钮,那么还需要做一些事来解决。

[另外两个选项:设置和检查变量,或仅禁用按钮。

选项1:设置并检查变量

在您的应用程序变量中,在主入口点的顶部:

var ignoreClick = false;

然后在您的点击处理程序中:

$(document).on("click", "#openBtn1", function(event) {
  if (ignoreClick) return;
  ignoreClick = true;
  shell.openItem(value.url);
})

选项2:禁用按钮:

$(document).on("click", "#openBtn1", function(event) {
  $('#openBtn1').attr('disabled', true);
  shell.openItem(value.url);
})

重新启用点击处理程序

两种方法中,您都必须通过哪种逻辑来重新启用按钮(或者ignoreClick变量重置为false)。一个可能的示例(在上面的选项1上进行扩展)是设置一个较短的计时器(一秒钟):

$(document).on("click", "#openBtn1", function(event) {
  if (ignoreClick) return;
  ignoreClick = true;
  shell.openItem(value.url);
  setTimeout(() => { ignoreClick = false; }, 1000);
})

您可以在setTimeout行的末尾使用该数字;以毫秒为单位,即1000 = 1秒。半秒甚至更少的时间就足够了,尽管这只是一个通用/示例解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.