2012-06-08 2 views
0

크롬 확장에 변수에 전달합니다현재 탭을 얻고 나는 현재 탭의 URL을 반환하는 함수 만들려고 해요

function tabURL() { 
var url=""; 
chrome.tabs.getSelected(null, function(tab) {url = tab.url;}); 
return url; 
} 

내가 사용

chrome.tabs.getSelected(null, function(tab) {alert(tab.url);}); 

크롬 쇼 url하지만 크롬 콘솔 내부에서 함수를 사용하면 함수는 ""을 반환합니다.

tab.url을 변수에 전달한 다음이 변수를 반환 할 수 있습니까?

+0

내가 자바 스크립트 범위 지정 규칙을 기억에서 끔찍한,하지만 당신은'로 전달하는 기능이 getSelected' 사용자가 만든 것과 같은'url' 변수가 않습니다 'tabURL()'에? – Collin

답변

6

chrome.tabs.getSelected비동기입니다. 즉, 콜백 함수가 호출 될 때 return url이 "이미 발생했습니다"라는 의미입니다.

원하는 효과를 얻으려면 두 가지 옵션이 있습니다.

  1. 올바른 비동기 측면을 구현하려면 코드를 올바르게 다시 작성하십시오. 정확한 세부 정보는 확장 프로그램의 구현에 따라 다릅니다. getSelectedchrome.tabs.onUpdated를 사용하여 현재 URL을 해시를 유지

  2. 크롬 16부터 chrome.tabs.query으로 deprecated되었습니다 교체했다고
    참고합니다 (를 설정 chrome.tabs.onRemoved (사용되지 않는 항목을 제거), (TABID + URL을 추가) 및 chrome.tabs.onActivated 현재 활성 탭). 2

코드 :

// Our hash 
var tabIdToURL = {}; 
var currentTabId = -1; 
// Add changes to the hash (tab creation, tab's page load) 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    tabIdToURL[tabId] = tab.url; // also available as tab.id and changeInfo.url 
}); 
// Remove entries from closed tabs 
chrome.tabs.onRemoved.addListener(function(tabId) { 
    delete tabIdToURL[tabId]; 
}); 
// Set the ID of the current active tab 
chrome.tabs.onActivated.addListener(function(activeInfo) { 
    currentTabId = activeInfo.tabId; 
}); 

// Usage, based on the question's function 
function getURL() { 
    return tabIdToURL[currentTabId] || ''; 
} 
관련 문제