查找meta“;说明”;使用Javascript
我试图传递一个tab对象查找meta“;说明”;使用Javascript,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我试图传递一个tab对象tabout,以查找网页的描述和标题 当我用一些断点调试代码时,它返回值,但当我运行它时,它不返回描述 代码有问题吗 function computeDescription(tabout) { var code = 'var meta = document.querySelector("meta[name=\'description\']");' + 'if (meta) me
tabout
,以查找网页的描述和标题
当我用一些断点调试代码时,它返回值,但当我运行它时,它不返回描述
代码有问题吗
function computeDescription(tabout)
{
var code = 'var meta = document.querySelector("meta[name=\'description\']");' +
'if (meta) meta = meta.getAttribute("content");' +
'({' +
' title: document.title,' +
' description: meta || ""' +
'});';
var desc;
var message = document.querySelector('#message');
chrome.tabs.executeScript(tabout.id,{code: code}, function(results) {
if (chrome.extension.lastError) {
message.innerText = 'There was an error injecting script :\n'+chrome.extension.lastError.message;
}
if (!results) {
return;
}
var result = results[0];
// Now, do something with result.title and result.description
console.log(result.title);
console.log(result.description);
desc=result.description;
});
return desc;
}
看起来您假设您给
executeScript
的回调将在computeDescription
返回之前执行。事实并非如此executeScript
异步执行,在computeDescription
返回之前,您的回调永远不会运行
为了处理这个问题,您需要采用异步模型来定义computeDescription
。不返回值,而是获取回调参数并在数据准备就绪时调用它
function computeDescription(tabout, callback) {
var code = 'var meta = document.querySelector("meta[name=\'description\']");' +
'if (meta) meta = meta.getAttribute("content");' +
'({' +
' title: document.title,' +
' description: meta || ""' +
'});';
var message = document.querySelector('#message');
chrome.tabs.executeScript(tabout.id, {code: code}, function(results) {
if (chrome.extension.lastError) {
message.innerText = 'There was an error injecting script :\n'+chrome.extension.lastError.message;
}
if (!results) {
callback();
}
callback(results[0].description);
});
}
然后,您的用法从
console.log('Le description is: ' + computeDescription(tab));
到
如果我在开发人员控制台中运行它,这部分就可以工作,问题似乎出在其他地方:document.querySelector(“meta[name='description'])
computeDescription(tab, function(description) {
console.log('Le description is: ' + description);
});