2014-02-27 44 views
0

我試圖通過標籤對象tabout以查找網頁的描述和標題。使用Javascript查找meta「description」

當我用一些斷點調試代碼時,它返回值,但是當我運行它時,它不返回描述。

代碼有問題嗎?

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; 

} 
+0

如果我在開發者控制檯中運行它這部分的工作,它看起來像這個問題是其他地方:document.querySelector ( 「間位[名稱= '描述']」) – KoalaBear

回答

0

它看起來像你假設你給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)); 

computeDescription(tab, function(description) { 
    console.log('Le description is: ' + description); 
});