Comment faire apparaître page_action pour des pages spécifiques?

Je jouais avec des extensions chromées et j'ai trouvé cet exemple: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/

Tout fonctionne bien, mais je veux créer ma propre extension et je veux voir l'icône de page_action sur un site spécifique, pas ceux avec 'g' dans leurs URL. J'ai donc simplement essayé de changer le script de ceci:

// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Called when the url of a tab changes. function checkForValidUrl(tabId, changeInfo, tab) { // If the letter 'g' is found in the tab's URL... if (tab.url.indexOf('g') > -1) { // ... show the page action. chrome.pageAction.show(tabId); } }; // Listen for any changes to the URL of any tab. chrome.tabs.onUpdated.addListener(checkForValidUrl); 

Dans ceci:

 chrome.pageAction.show(tabId); 

Mais maintenant, ça ne fonctionne pas … Je ne l'ai pas compris. Évidemment, je peux utiliser une solution de contournement, mais ce n'est pas le point … Tout d'abord, dois-je créer une page de fond pour faire cela? Je pense que oui, mais je ne vois pas pourquoi, et pourquoi la méthode .show ne fonctionne pas seule? J'ai essayé de rechercher dans la documentation et les trucs de google, mais je n'ai pas trouvé d'utilité. Je ne suis pas un expert, et ce fut ma première après-midi consacrée à l'extension Google, mais comment savoir si "chrome.page.show" ( TabId) "doit aller dans une page d'arrière-plan si elle n'est écrite nulle part ailleurs? Pas d'intention de critiquer, mais comment diablez-vous les découvrir? Toutes les méthodes chrome doivent être intégrées dans une page de fond? Eh bien, certainement beaucoup plus de questions, alors c'est légitime. J'espère que vous pouvez me donner au moins une réponse!

http://code.google.com/chrome/extensions/pageAction.html
…dit…

Par défaut, une action de page est masquée. Lorsque vous le montrez, vous spécifiez l'onglet dans lequel l'icône devrait apparaître. L'icône reste visible jusqu'à ce que l'onglet soit fermé ou commence à afficher une URL différente (car l'utilisateur clique sur un lien, par exemple).

Donc, même si votre tabid était valide, il se dissimulerait très rapidement car votre seul chrome.pageAction.show(tabId); Une fois que la première page d'arrière-plan est exécutée.
Vous devez vérifier les modifications apportées aux onglets en arrière-plan en permanence parce que les pages ne comportent pas de paramètres de correspondance / exclusion dans les scripts de contenu de type manifeste (pitié). Donc, vous devez vous contrôler et répondre aux modifications.
Si vous voulez qu'il fonctionne pour un site spécifique, il suffit de le changer à quelque chose comme …

 // Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Called when the url of a tab changes. function checkForValidUrl(tabId, changeInfo, tab) { // If the tabs url starts with "http://specificsite.com"... if (tab.url.indexOf('http://specificsite.com') == 0) { // ... show the page action. chrome.pageAction.show(tabId); } }; // Listen for any changes to the URL of any tab. chrome.tabs.onUpdated.addListener(checkForValidUrl); 

Pour ceux qui recherchent un moyen de gérer les sous-domaines, si vous avez un site avec un sous-domaine tel que blog.specificsite.com , ou avez besoin d'utiliser des caractères génériques, vous pouvez également utiliser Regex dans ce format

 function checkForValidUrl(tabId, changeInfo, tab) { if(typeof tab != "undefined" && typeof tab != "null" ) { // If the tabs URL contains "specificsite.com"... //This would work in the same way as *specificsite.com*, with 0 or more characters surrounding the URL. if (/specificsite[.]com/.test(tab.url)) { // ... show the page action. chrome.pageAction.show(tabId); } } }; // Listen for any changes to the URL of any tab. chrome.tabs.onUpdated.addListener(checkForValidUrl); 

Pour faire correspondre la sous-chaîne dans l'URL. Il aide également à calculer une vérification nulle / non définie pour éviter une gestion supplémentaire des exceptions.