Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找meta“;说明”;使用Javascript_Javascript_Google Chrome Extension - Fatal编程技术网

查找meta“;说明”;使用Javascript

查找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

我试图传递一个tab对象
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);
});