6

Déjame explicarte mi problema. Actualmente estoy desarrollando una extensión de Google Chrome que inyecta una barra de herramientas como un iframe en cada página web.Escucha en una secuencia de comandos de contenido

El problema es que, en algunos casos, necesito ocultar la barra de herramientas, volver a mostrarla y cosas por el estilo. Basicelly estaba pensando en poner a mi oyente en mi página de fondo, pero es inútil porque esta página no puede manipular el objeto de forma gráfica. Así que mi plan era poner este oyente en un content_script (que puede manipular gráficamente el objeto). Pero el segundo problema es que un script de contenido en oposición a una página de fondo no se ejecuta todo el tiempo, sino solo una vez.

así que estoy preguntándome si es posible hacer un contenido en script suena como un fondo páginas, poniendo un bucle en él o algo por el estilo ...

Gracias de antemano.

He intentado esto:

manifest.json

{ 
    "background_page" : "background.html", 
    "browser_action" : 
    { 
     "default_icon" : "images/extension.png" 
     //"popup" : "activateToolbar.html" 
    }, 
    "content_scripts": 
    [ { 
      "all_frames": true, 
      "css": ["css/yourtoolbar.css"], 
      "js": ["js/jquery.js", "js/yourtoolbar.js", "js/listener.js"], 
      "matches": ["http://*/*"], 
      "run_at": "document_end" 
    } ], 
    "permissions" : ["tabs", "unlimitedStorage", "http://*/*", "notifications"],  
    "name" : "YourToolbar", 
    "version" : "1.1", 
    "description" : "Make your own Toolbar" 
} 

toolbar.html

<!-- Close Button --> 
      <a href="javascript:hideToolbar()"><input type="image" src="images/close.png" name="close" width="18" height="18"></a> 

Tool.js

function hideToolbar() 
{ 
    chrome.extension.sendRequest({action : "hideToolbar"}); 
    window.webkitNotifications.createHTMLNotification('instantMessage.html', 'Ask Show Menu').show(); 
} 

listener.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse){ 
    if(request.action) 
    { 
     $('body').remove(); 
     console.log('Received Start'); 
     alert(request.action); 
     console.log('Received End'); 
    } 
    else 
    { 
     console.log('nothing'); 
     alert('Not For Me [listener.js]'); 
    } 
}); 

background.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{ 
    if(request.newTab) 
    { 
     // Create a new Tab 
     chrome.tabs.create({url: request.newTab}); 
    } 
    else if(request.newWindow) 
    { 
     // Create a new Window 
     chrome.windows.create({url: request.newWindow}); 
    } 
    else if(request.action) 
    {  
     chrome.tabs.getAllInWindow(null, function(tabs) { 
      $.each(tabs, function() { 
      chrome.tabs.sendRequest(this.id, {"action":"hideToolbar"}); 
      }); 
     }); 
    } 
}); 

pero el problema es que el addListener no bloqueó la ejecución y él simplemente no entendió nada ...

+0

¿Puede mostrarnos cómo está enviando las solicitudes a este script de contenido? – serg

Respuesta

6

para enviar una solicitud de una página de fondo a un script de contenido que necesita usar chrome.tabs.sendRequest (no chrome.extension.sendRequest) y proporcionar tab id.

En un script de contenido no necesita crear periódicamente chrome.extension.onRequest.addListener, simplemente créelo una vez y estará allí permanentemente.

EDITAR

Para enviar una solicitud de un script de contenido que necesita para funcionar chrome.extension.sendRequest allí y añadir chrome.extension.onRequest.addListener a una página de fondo.

+0

Pero dígame cómo "enviar una solicitud desde una página de fondo a un script de contenido" Quiero enviar una solicitud desde el script de contenido a la página de fondo ... – Sindar

+0

@Sindar Entonces, ¿por qué crea un oyente en un secuencia de comandos de contenido y enviar una solicitud desde una página de fondo? Tienes que cambiar todo alrededor entonces. – serg

+0

@Serg No estoy seguro de que entiendas lo que quiero. Para que quede claro, chrome.extension.sendRequest ({action: "hideToolbar"}); llamar a mi oyente (script de contenido). Eso es lo que quiero, pero no funcionó, aquí no hay interacción con la página de fondo. ¿Habías entendido eso? Así que quiero hacer un oyente como en mi archivo de script de contenido "listener.js". – Sindar

Cuestiones relacionadas