2013-08-22 2 views
0

background.html:Вкладки повторите щелчок действия страницы

// Called when the url of a tab changes. 
function checkForValidUrl(tabId, changeInfo, tab) { 
    if(changeInfo.status === "loading") { 
     if (tab.url.indexOf('google.com') > -1) { 
     // ... show the page action. 
     chrome.pageAction.show(tabId); 
     chrome.pageAction.onClicked.addListener(function(tab){ 

    chrome.tabs.create({url: "facebook.com", "active":true}); 

     });  
} 
} 
}; 


// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 

Итак, я иду на Google, нажмите действия страницы в новой вкладке открывается фейсбук. Я делаю новую вкладку с google снова, нажмите действие страницы и открывает 2 facebook-tabs. Его странно, потому что мне нужно - 1 щелчок на странице действий - 1 новая вкладка. Как это исправить?

Спасибо.

ответ

1

Проблема в том, что вы добавляете слушателя событий каждый раз, когда изменяется вкладка.

Поскольку вы звоните checkForValidUrl каждый раз, когда вкладка изменяется, chrome.pageAction.onClicked.addListener также вызывается каждый раз, когда изменяется вкладка. Теперь у вашего pageAction есть два прослушивателя событий, делающих то же самое. Вы можете проверить это, изменив вкладки несколько раз и увидите, что он откроет столько вкладок Facebook, сколько вы изменили вкладки.

Чтобы исправить это, конечно, вы должны удалить следующие из checkForValidUrl:

chrome.pageAction.onClicked.addListener(function(tab){ 
    chrome.tabs.create({url: "facebook.com", "active":true}); 
}); 

и поставить его снаружи, например, после того, как вы создали свой приемник для chrome.tabs.onUpdated.

+0

о, спасибо. Я думаю, что «если показано действие страницы, тогда нажмите« .. »и т. Д.». Thnaks. – tim

+0

Да, я предполагаю, что действие страницы «живет» с фоновой страницей и поэтому всегда вокруг и готово к скрытию или показу. (т. е. слушатель остается с ним). В качестве побочной заметки ваш вопрос заставил меня задаться вопросом, как изменить уже установленный слушатель. Ответ не документирован: 'chrome.pageAction.onClicked' имеет больше методов, чем просто' addListener', включая 'hasListener' и' removeListener'. Конечно, вам нужно будет ссылаться на ваш обратный вызов, чтобы использовать их. –

Смежные вопросы