Electron - 另一个程序正在使用这个文件?
Electron - another program is using this file?
我创建了一个搜索栏,用于搜索 JSON 并使用 "open link" 按钮显示 html 中的信息。这些文件是用户单击按钮时在 Google 地球中打开的本地 kmz/kml 文件。
为什么当我点击打开按钮时 Google Earth 加载它然后我的应用程序中收到一个弹出窗口显示 "Another program is currently using this file" 然后在我重新启动应用程序之前不会清除?
$(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);
})
}
});
})
});
});
您的点击事件可能触发了多次。如果是这样,可以在 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 秒。半秒或更短时间可能就足够了,尽管这只是一个 general/example 解决方案。
我创建了一个搜索栏,用于搜索 JSON 并使用 "open link" 按钮显示 html 中的信息。这些文件是用户单击按钮时在 Google 地球中打开的本地 kmz/kml 文件。
为什么当我点击打开按钮时 Google Earth 加载它然后我的应用程序中收到一个弹出窗口显示 "Another program is currently using this file" 然后在我重新启动应用程序之前不会清除?
$(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);
})
}
});
})
});
});
您的点击事件可能触发了多次。如果是这样,可以在 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 秒。半秒或更短时间可能就足够了,尽管这只是一个 general/example 解决方案。