gpt4 book ai didi

javascript - if/else 循环执行两个条件

转载 作者:行者123 更新时间:2023-12-01 03:41:27 26 4
gpt4 key购买 nike

好的,我有以下代码。这个想法是检查页面是否存在,如果不存在,则打开一个新选项卡。如果存在,导航到它。

chrome.browserAction.onClicked.addListener(function(tab) {
function check() {
chrome.tabs.query(
{currentWindow: true, url: 'https://www.google.com/*'},
function(tabs) {
tabs.forEach(function(tab) {
console.log('Tab ID, URL: ', tab.id, ' ', tab.url);
if(tab.url !== '')
{
var updateProperties = {"active": true};
chrome.tabs.update(tab.id, updateProperties, function(tab){ });
console.log('Assign true to functon');
return true;
}
});
});
};

if(check() === true) {
console.log('Function is true, do nothing')
}
else {
console.log('Function is false, open page')
chrome.tabs.create({ url: "https://www.google.com"});
}
});

第一部分工作正常,但第二部分同时执行 true 和 false 部分。就像是在函数之前执行 if/else 语句?

最佳答案

代码中存在一些问题:

  1. check 永远不会返回任何内容,因此 check() === true 永远不会为 true。如果您在控制台中看到“函数为真,不执行任何操作”,则它不是来自该代码。

  2. 检查 无法返回任何有用的内容,因为 chrome.tabs.query是异步的*。

因此,我们完全摆脱了check,并将创建逻辑移至回调中:

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.query({
currentWindow: true,
url: 'https://www.google.com/*'
}, function(tabs) {
const tab = tabs.find(tab => tab.url !== '');
if (tab) {
const updateProperties = {
"active": true
};
chrome.tabs.update(tab.id, updateProperties, function(tab) {});
} else {
chrome.tabs.create({
url: "https://www.google.com"
});
}
}
});

一些旁注,因为我已经很长时间没有编写 Chrome 扩展了:

  1. 您真的需要搜索标签吗?假设您将 url 传递到 query 中,if (tabs.length) 不会告诉您该选项卡已经存在吗?

  2. 您真的需要将 no-op 函数传递到 chrome.tabs.update 中吗?

<小时/>

* 我认为是这样,因为它接受它调用的回调而不是返回数组。令人恼火的是,文档实际上并没有这么说。 Karim 有 confirmed it does在评论中,我会相信他。 :-)

关于javascript - if/else 循环执行两个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43845254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com