2012-02-11 6 views
15

Yo estaba jugando con algunas extensiones de cromo y me encontré con este ejemplo: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/¿Cómo hago que page_action aparezca para páginas específicas?

Todo funciona bien, pero quiero crear mi propia extensión y quiero ver el icono page_action en un sitio específico, no los que tienen ' g 'en sus urls. así que he intentado simplemente para cambiar el guión de esta:

// 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); 

En esto:

chrome.pageAction.show(tabId); 

Pero ahora no funciona ... Yo no lo entiendo. Obviamente puedo usar una solución alternativa, pero ese no es el punto ... Antes que nada, ¿debo crear una página de fondo para hacer esto? Creo que sí pero no puedo ver por qué, y ¿por qué el método .show no funciona solo? Traté de buscar en la documentación de google y esas cosas, pero no pude encontrar nada útil. No soy un experto y esta ha sido mi primera tarde dedicada a la extensión de Google, pero ¿cómo debo saber que el "chrome.page.show (tabId) "debe ir en una página de fondo si no está escrito en ninguna parte? Sin intención de criticar, pero ¿cómo diablos se enteraron? Todos los métodos de Chrome deben ir en una página de fondo? Bueno, definitivamente muchas más preguntas, entonces, ¿de qué es legítimo? Espero que puedas darme al menos una respuesta!

+0

¿Le está dando una 'tabId' válida? – abraham

Respuesta

28

http://code.google.com/chrome/extensions/pageAction.html
... dice ...

Por defecto, una acción de página se oculta. Cuando lo muestre, especifique la pestaña en la que debería aparecer el icono. El icono permanece visible hasta que la pestaña esté cerrada o comience a mostrar una URL diferente (porque el usuario hace clic en un enlace, por ejemplo).

Así que incluso si su tabid era válida sería desaparecer bastante rápido como su única corriendo chrome.pageAction.show(tabId); una vez cuando el fondo de la página primero se ejecute.
Necesita comprobar constantemente si hay cambios en las pestañas en segundo plano porque las páginas no tienen coincidencias/exclude_matches configuraciones en el manifiesto como los scripts de contenido do (lastima). Entonces debe verificarse y responder a los cambios.
Si quieres que funcione para un sitio específico simplemente cambiar a algo así como ...

// 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); 
+0

Entendido, muchas gracias. Leí el pasaje que citaste, ¡pero aparentemente no lo entendí tan bien! – Treferwynd

+0

Mmh, puede responder también a esta pregunta: Suponiendo que bg.js es el archivo que contiene (y contiene ** solo **) el código que cité (o el que citó). ¿Por qué si escribo esto: en background.html funciona, pero si intento escribir el código directamente en background.html, no? – Treferwynd

+4

Supongo que tiene '" manifest_version ": 2' en su archivo de manifiesto, que no permitirá los bloques en línea ' en background.html, o elimine '' manifest_version ": 2' en su manifiesto, o cambie la parte de fondo del manifiesto también' "background": {"scripts": ["bg.js"]} '... no sabía que podrías hacer la última hasta ahora. – PAEz

1

Para aquellos que buscan una manera de manejar subdominios, si usted tiene un sitio con un subdominio como el blog .specificsite.com, o la necesidad de utilizar comodines, también puede utilizar expresiones regulares en este formato

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); 

para que coincida con la subcadena dentro de la URL. También ayuda con el cálculo realizar un control nulo/indefinido para evitar el manejo de excepciones adicionales.

Cuestiones relacionadas