jQuery 扩展代码中的简单 jQuery 延迟问题
Simple jQuery deferred issue in chrome extension code
我在理解 jQuery deferred 和 promise 时遇到了一个小问题,我想将其用于我第一次开发的 Chrome 扩展。我希望能够在弹出窗口中检测当前选项卡是否为 Facebook.com。我知道可能有更简单的方法,但我想在此过程中学习 deferred 和 promises。这只是一个测试项目。抱歉我的英语不好,非常感谢每条评论!提前致谢。你会在下面找到我的代码...
function getCurrentTabUrl(callback) {
// https://developer.chrome.com/extensions/tabs#method-query
alert("hmm");
var dfd = $.Deferred();
var queryInfo = {
active: true,
currentWindow: true
};
chrome.tabs.query(queryInfo, function(tabs) {
alert(tabs[0].url);
if(callback(tabs[0].url)) {
dfd.resolve();
} else {
dfd.reject();
}
});
return dfd.promise();
}
document.addEventListener('DOMContentLoaded', function() {
var callback = function getCurrentTab(tab){
alert("ök");
if(tab == "https://www.facebook.com/") { return true; }
else { return false; }
}
getCurrentTabUrl(callback).done(function () {
alert('on facebook');
$('.section').hide();
$('.navitem').on('click', function () {
var value = $(this).html().toLocaleLowerCase();
$('.section').hide();
$('#'+value).show();
});
}).fail(function () {
alert('not on facebook');
});
});
基本上你想做的是 "turn" 一个带有回调的函数作为承诺,但你做错了。
试试这个:
function getCurrentTabUrl(callback) {
return new Promise(function (resolve, reject) {
// https://developer.chrome.com/extensions/tabs#method-query
alert("hmm");
var queryInfo = {
active: true,
currentWindow: true
};
chrome.tabs.query(queryInfo, function (tabs) {
alert(tabs[0].url);
if (callback(tabs[0].url)) {
resolve();
} else {
reject();
}
});
});
}
here 中的更多内容。
我在理解 jQuery deferred 和 promise 时遇到了一个小问题,我想将其用于我第一次开发的 Chrome 扩展。我希望能够在弹出窗口中检测当前选项卡是否为 Facebook.com。我知道可能有更简单的方法,但我想在此过程中学习 deferred 和 promises。这只是一个测试项目。抱歉我的英语不好,非常感谢每条评论!提前致谢。你会在下面找到我的代码...
function getCurrentTabUrl(callback) {
// https://developer.chrome.com/extensions/tabs#method-query
alert("hmm");
var dfd = $.Deferred();
var queryInfo = {
active: true,
currentWindow: true
};
chrome.tabs.query(queryInfo, function(tabs) {
alert(tabs[0].url);
if(callback(tabs[0].url)) {
dfd.resolve();
} else {
dfd.reject();
}
});
return dfd.promise();
}
document.addEventListener('DOMContentLoaded', function() {
var callback = function getCurrentTab(tab){
alert("ök");
if(tab == "https://www.facebook.com/") { return true; }
else { return false; }
}
getCurrentTabUrl(callback).done(function () {
alert('on facebook');
$('.section').hide();
$('.navitem').on('click', function () {
var value = $(this).html().toLocaleLowerCase();
$('.section').hide();
$('#'+value).show();
});
}).fail(function () {
alert('not on facebook');
});
});
基本上你想做的是 "turn" 一个带有回调的函数作为承诺,但你做错了。
试试这个:
function getCurrentTabUrl(callback) {
return new Promise(function (resolve, reject) {
// https://developer.chrome.com/extensions/tabs#method-query
alert("hmm");
var queryInfo = {
active: true,
currentWindow: true
};
chrome.tabs.query(queryInfo, function (tabs) {
alert(tabs[0].url);
if (callback(tabs[0].url)) {
resolve();
} else {
reject();
}
});
});
}
here 中的更多内容。