2014-06-23 45 views
-1

我拼命試圖做一個鉻擴展,應該保存鏈接標題到數據庫。爲此,我創建了以下JavaScript文件:getAttribute除了getElementsByTagName不能在一個擴展的鉻擴展js腳本

mysu.js

var linkTitle; 
window.addEventListener('load', function() { 
    var urls= document.querySelectorAll('a.url'); 
    for(i=0,len=urls.length;i<len; i++) { 
    urls[i].addEventListener('click', function() { 
     chrome.tabs.create({url: this.href}); 
    }, false); 
    } 
    var a=document.getElementsByTagName('a'); 
    for (i=0,len=a.length;i<len;i++) { 
    a[i].addEventListener('contextmenu', function() { 
     var tmpThis = this; 
     var tmpTitle = tmpThis.getAttribute('title').trim(); 
     alert(tmpTitle); 
     var tmpText = tmpThis.textContent.trim(); 
     var tmpImg = tmpThis.childNodes('img').firstChild; 
     if ((tmpTitle != null) && (tmpTitle.length > 0)) { 
     linkTitle = tmpTitle; 
     } else if ((tmpText != null) && (tmpText.length > 0)) { 
     linkTitle = tmpText; 
     } else if (tmpImg != null) { 
     linkTitle = tmpImg.getAttribute("alt"); 
     } 
    }); 
    }; 
}, false); 


chrome.contextMenus.create({'title': 'Add to mySU bookmarks', 'contexts': ['link', 'page'], 'onclick': mySUBookmark}); 

function mySUBookmark() { 
alert(linkTitle); 
} 

當然,我試圖用警惕調試()第一。但是,無論我做什麼,我都會得到一個未定義的。我試圖從另一個我知道這樣做的擴展中複製這種行爲。我錯過了什麼?

問候,

K.

PS:以下是我的清單文件,在情況下,它可以幫助:

manifest.json的

{ 
    "name" : "mySU", 
    "description" : "mySU", 
    "browser_action": { 
    "default_icon": "images/mysu.png", 
    "default_popup": "html/mysu.html", 
    "default_title": "Select page to navigate to..." 
    }, 
    "permissions": [ 
    "tabs", 
    "contextMenus", 
    "storage", 
    "http://mysu.sabanciuniv.edu/*", 
    "http://*.sabanciuniv.edu/*" 
    ], 
    "background": { 
    "scripts": ["js/mysu.js"] 
    }, 
    "icons": { 
    "128": "images/mysu.png" 
    }, 
    "version": "1.0", 
    "minimum_chrome_version": "9", 
    "manifest_version": 2 
} 
+0

這是什麼執行上下文?你可以發佈你的manifest.json嗎? – Xan

+0

@Xan我更新了我的問題。 –

回答

0

我假設你想在觸發上下文菜單項的網頁上下文中執行代碼的第一部分。

這不會發生:它在不可見的空白背景頁面的上下文中執行。

閱讀關於Context Scripts的文檔以瞭解如何操作。你可以把它放到一個js文件中,並將其注入到觸發上下文菜單的選項卡中。

或者,看看info對象,一個onclick處理程序上下文菜單提供:

function mySUBookmark(info, tab) { 
    console.log(info); 
} 

這可能會提供您所追求的,無需額外的代碼。雖然,maybe not

+0

那麼,我是否需要將其轉換爲內容腳本?順便說一句,我已經嘗試了'console.log(info)'方法,它沒有給我我想要的。 –

+0

我將它轉換爲內容腳本,仍然沒有:S –

+0

定義「轉換」,這將需要大量的返工。我不認爲我們可以在堅持StackOverflow格式的情況下進一步提供幫助。 – Xan