Javascript 电子-另一个程序正在使用此文件?
我创建了一个搜索栏,搜索JSON,并通过“打开链接”按钮以html格式显示信息。这些文件是本地kmz/kml文件,当用户单击按钮时,这些文件会在Google Earth中打开 为什么当我点击“打开”按钮时,Google Earth会加载它,然后我在我的应用程序中收到一个弹出窗口,上面写着“另一个程序正在使用此文件”,然后在我重新启动应用程序之前不会清除Javascript 电子-另一个程序正在使用此文件?,javascript,html,json,electron,google-earth,Javascript,Html,Json,Electron,Google Earth,我创建了一个搜索栏,搜索JSON,并通过“打开链接”按钮以html格式显示信息。这些文件是本地kmz/kml文件,当用户单击按钮时,这些文件会在Google Earth中打开 为什么当我点击“打开”按钮时,Google Earth会加载它,然后我在我的应用程序中收到一个弹出窗口,上面写着“另一个程序正在使用此文件”,然后在我重新启动应用程序之前不会清除 $(document).ready(function() { $('#myInput').keyup(function() {
$(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);
})
}
});
})
});
});
$(文档).ready(函数(){
$('#myInput').keyup(函数(){
$('#acegority').html('');
var searchField=$('#myInput').val();
var表达式=新的RegExp(searchField,“i”);
$.getJSON('jsoncleanmaster.json',函数(数据){
$。每个(数据、函数(键、值){
if(value.category.search(表达式)!=-1||
value.name.search(表达式)!=-1||
value.desc.search(表达式)!=-1||
value.url.search(表达式)!=-1){
$('#aceContegory')。追加(“+”+”)+
value.name+”--“+”(“+value.category+”)++++“
”+
value.desc+“”+“”+
“”“+”您的单击事件可能多次触发。如果是这样,无论答案有多快,都可以找到一个可能的解决方案,如果您打算稍后重新启用按钮,还需要做更多的工作
另外两个选项:设置并检查变量,或者只是禁用按钮
选项1:设置并检查变量
在应用程序变量中,在主入口点的顶部:
var ignoreClick=false;
然后在单击处理程序中:
$(document).on("click", "#openBtn1", function(event) {
if (ignoreClick) return;
ignoreClick = true;
shell.openItem(value.url);
})
选项2:禁用按钮:
重新启用单击处理程序
无论采用哪种方式,您都必须决定按钮重新启用的逻辑(或ignoreClick
变量重置为false
)。执行此操作的一个可能示例(在上面的选项1上展开)是设置一个短(1秒)计时器:
您可以在setTimeout
行的末尾使用该数字;以毫秒为单位,即1000=1秒。虽然这只是一个通用/示例解决方案,但半秒或更短的时间可能就足够了。您的单击事件可能会触发多次。如果是这样,那么无论多么快,都可以找到一个可能的解决方案答案是,如果您打算稍后重新启用该按钮,则需要进行更多的反转工作
另外两个选项:设置并检查变量,或者只是禁用按钮
选项1:设置并检查变量
在应用程序变量中,在主入口点的顶部:
var ignoreClick=false;
然后在单击处理程序中:
$(document).on("click", "#openBtn1", function(event) {
if (ignoreClick) return;
ignoreClick = true;
shell.openItem(value.url);
})
选项2:禁用按钮:
重新启用单击处理程序
无论采用哪种方式,您都必须决定按钮重新启用的逻辑(或ignoreClick
变量重置为false
)。执行此操作的一个可能示例(在上面的选项1上展开)是设置一个短(1秒)计时器:
你可以在setTimeout
行的末尾使用这个数字;它以毫秒为单位,也就是1000=1秒。虽然这只是一个通用/示例解决方案,但半秒甚至更短的时间就足够了。@Nathan Hawks-谢谢!!我使用了你的选项1,解决了弹出窗口问题,但现在它正在加载第一个json url对象而不是与搜索表达式关联的文件?能否提供一个示例,说明单击“打开”按钮后如何重置值?我希望用户在搜索我创建为不同层的kmz时能够加载多个文件。@RT7您只需在某个点设置ignoreClick=false
,即可重新启用单击处理程序;我在回答中添加了一个示例实现。@Nathan Hawks在进一步测试后,检索并打开JSON文件中的第一个url,而不是每个按钮旁边列出的url。想法?显然value。url
是错误的值。但这远远超出了这个问题的范围。@Nathan Hawks-Thanks!!我使用了您的选项1,它解决了弹出窗口问题,但现在它加载的是第一个json url对象,而不是与搜索表达式关联的对象?您能提供一个例子,说明如何在单击“打开”按钮后重设值吗?我希望用户能够在搜索我创建的kmz时加载多个文件ent层。@RT7您只需在某个时候设置ignoreClick=false
,即可重新启用单击处理程序;我已在我的答案中添加了一个示例实现。@Nathan Hawks在进一步测试后,检索并打开JSON文件中的第一个url,而不是每个按钮旁边列出的url。想法?显然vurl是错误的值。但这远远超出了这个问题的范围。
$(document).on("click", "#openBtn1", function(event) {
if (ignoreClick) return;
ignoreClick = true;
shell.openItem(value.url);
setTimeout(() => { ignoreClick = false; }, 1000);
})