2013-06-26 72 views
0

我試圖構建一個Chrome擴展程序,它將檢查(通過「鏈接:URL」Google搜索)哪些網站鏈接到當前打開的網站標籤。但是我的代碼無法正確地將標籤的URL保存到一個變量中。我在stackoverflow上發現了類似的問題(和他們的答案),我知道它可能與js是異步的事實有關,但我無法使其工作。任何提示(s)將非常感激。謝謝!從Chrome選項卡中保存URL的困難(適用於Chrome擴展)

// this is the part that doesn't work 

chrome.tabs.query({'active': true}, function (tabs) { 
    var query = tabs[0].url; 
    }); 

// this is the part that works just fine 

chrome.browserAction.onClicked.addListener(function(activeTab) 
{ 

    var stemURL = "http://www.google.com/#q=link:"; 
    chrome.tabs.create({ url: (stemURL + query) }); 
}); 

下面是如何設置清單中的權限,這應該是正確的

"permissions": [ 
    "tabs", "http://*/*", "https://*/*" 
    ], 
+0

對於您的擴展程序,Google的搜索結果可能存在一些麻煩;它會給你不同的結果,具體取決於你在「link:」中是否在冒號後面加空格。 ([Source](http://productforums.google.com/forum/#!topic/websearch/Y-cqCyEBp8Y)) –

回答

0

這是因爲當你宣佈你的「查詢」變量,它只有在Chrome回調函數內範圍.tabs.query。現在,你可以在你的腳本的頂部聲明您的變量給它的範圍整個腳本中:

var query; 
chrome.tabs.query({'active': true}, function (tabs) { 
    query = tabs[0].url; 
    }); 
chrome.browserAction.onClicked.addListener(function(activeTab) 
{ 
    var stemURL = "http://www.google.com/#q=link:"; 
    chrome.tabs.create({ url: (stemURL + query) }); 
}); 

...或者你可以用你的activeTab變量chrome.browserAction.onClick傳遞給你搶活動標籤的網址,以確保您打開用戶在點擊您的分機按鈕時查看的標籤的搜索結果,這也會帶來額外的優勢:剪切前半部分代碼:

chrome.browserAction.onClicked.addListener(function(activeTab) 
{ 
    var stemURL = "http://www.google.com/#q=link:"; 
    chrome.tabs.create({ url: (stemURL + activeTab.url) }); 
}); 

我會推薦後一種方法;它更快,更乾淨,更可靠。祝你好運!

+0

現在我明白了爲什麼不起作用,非常感謝! – user2517854