2013-10-17 36 views
5

我有一個腳本,它從標籤中獲取標題並將其分配給變量。但是,我還需要獲得metadesctitle屬性以用於input字段。Javascript - 獲取頁面標題和元描述並將它們用作Chrome擴展的變量

我不知道如果我能做到這一點與此:

chrome.tabs.getSelected(null, function(tab) { 
    var currentTitle = tab.title; 
}); 

然後,我需要得到meta描述,我不相信我可以從選項卡中的數據得到。

這是我從獲得的描述HTML:

<meta name="description" content="contentstuffya" /> 

這是JavaScript,我用得到它的擴展之外:

document.getElementsByName('description')[0].getAttribute('content'); 

我如何能最好地做到這一點鑑於我擁有的數據?

+0

那個包含'description'的html行是什麼樣的? – yakiang

回答

7

<meta>標記的值只能通過內容腳本讀取。這裏有一個例子:

var code = 'var meta = document.querySelector("meta[name=\'description\']");' + 
      'if (meta) meta = meta.getAttribute("content");' + 
      '({' + 
      ' title: document.title,' + 
      ' description: meta || ""' + 
      '});'; 
chrome.tabs.executeScript({ 
    code: code 
}, function(results) { 
    if (!results) { 
     // An error occurred at executing the script. You've probably not got 
     // the permission to execute a content script for the current tab 
     return; 
    } 
    var result = results[0]; 
    // Now, do something with result.title and result.description 
}); 

在第一線,我找到<meta name="description">元素。在第二行,如果元素存在,我讀取其content屬性的值。
chrome.tabs.executeScript的回調接收到最後一個表達式的返回值,所以我在對象的末尾放了一個對象字面值(用圓括號括起來)。

+0

是的,我是一名新秀。也許這是顯而易見的,但我試圖將標題和meta返回到我的擴展中的兩個輸入字段。 所以標題將是一個輸入的值,元將是另一個輸入的值。我從那一點將如何做到這一點? executeScript使得它內部的所有j在當前選項卡上執行,而不是在我的擴展中執行。 – jonode

+0

@ user2879869所以,你不知道如何繼續'//現在,用result.title和result.description'做些什麼?你有什麼代碼?如果你有類似''的東西,那麼你可以使用'document.getElementById('title')。value = result.title;',例如。編輯:執行腳本中的代碼在標籤的上下文中執行,但是它的回調在原始上下文中運行,可能是你的擴展的彈出。 –

+0

因此,用'document.getElementById('title')替換'//現在,用result.title和result.description'做一些事情。value = result.title;'? – jonode

相關問題