2016-01-22 33 views
8

Sto scrivendo un'estensione Google Chrome per automatizzare alcune attività comuni. La funzionalità che voglio è come segue:Come ascoltare la modifica dell'URL con Chrome Extension

  1. creare una nuova scheda e passare al mio webmail
  2. inserire username e password
  3. clic pulsante
  4. Attendere fino a quando viene visualizzata la pagina webmail "submit" e scegliere il client "roundcube".

Ho completato i passaggi 1,2 e 3 e funzionano. Sto avendo un sacco di problemi nel tentativo di ascoltare il cambio dell'URL dopo che le mie credenziali sono state inviate in modo che la funzione che seleziona il client roundcube possa essere eseguita

So che posso eseguire uno script quando viene visualizzata la pagina di selezione del client aggiungendo al mio manifest ma voglio usare "chrome.tabs.executeScript" invece che roundcube viene scelto solo se eseguo lo script dall'estensione chrome e non se vado manualmente alla pagina di selezione del client.

Ecco il mio manifest.json:

{ 
    "manifest_version": 2, 

    "name"  : "Chrome Autobot", 
    "description": "This extension will run various automation scripts for google chrome", 
    "version" : "1.0", 

    "browser_action" : { 
    "default_icon" : "icon.png", 
    "default_popup": "index.html" 
    }, 
    "permissions": [ 
    "activeTab", 
    "webNavigation", 
    "tabs", 
    "http://*/*", 
    "https://*/*" 
    ] 
} 

Ecco il mio script di cromo:

jQuery(function($) { 
    "Use Strict"; 

    var openWebmail = function() { 
     chrome.tabs.create({ 
      url: 'http://mywebmaillogin.com:2095/' 
     }, function() { 
      chrome.tabs.executeScript(null, {file: "scripts/openEmail.js"}); 
     }); 
     chrome.tabs.onUpdated.addListener(function(){ 
      chrome.tabs.executeScript(null, {file: "scripts/openEmail.js"}); 
      alert('i work'); 
     }); 
    }; 

    var init = $('.script-init'); 
    init.on('click', function() { 
     openWebmail(); 
    }); 

}); 

e qui è lo script contenuti deve essere eseguito come un callback di creazione scheda (quando l'e-mail la pagina di login viene caricata e il DOM è stato caricato) e anche quando le credenziali di posta elettronica vengono inviate e il DOM della pagina di selezione del client è stato caricato (che non funziona al momento)

var openEmail = function() { 
    var loc = window.location.href; 
    if(loc === 'http://mywebmaillogin.com:2095/') { 
     var submit = document.getElementById('login_submit'); 
     user.value = 'myusername'; 
     pass.value = 'mypassword'; 
     if(user.value === 'myusername' && pass.value === 'mypassword') { 
      submit.click(); 
     } 
     else { 
      openEmail(); 
     } 
    } 
    if(loc.indexOf('http://mywebmaillogin:2095/') > -1 && loc.indexOf('login=1') > -1) { 
     alert('I work'); 
    } 
}() 

qualsiasi aiuto sarebbe apprezzato ... grazie!

risposta

10

uso chrome.tabs.onUpdated

Maifest.json

{ 
    "name": "My test extension", 
    "version": "1", 
    "manifest_version": 2, 
    "background": { 
    "scripts":["background.js"] 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*", "https://*/*"], 
     "js": ["contentscript.js"] 
    } 
    ], 
    "permissions": [ 
    "tabs" 
    ] 
} 

contentscript.js

chrome.tabs.onUpdated.addListener(
    function(tabId, changeInfo, tab) { 
    window.console.log('updated from contentscript'); 
    } 
); 

background.js

chrome.tabs.onUpdated.addListener(function() { 
    alert('updated from background'); 
}); 
+4

Perché è necessario aggiungere queste schede al listener aggiornato due volte, rispettivamente a contentscript.js e background.js? – lsheng

+0

Non è necessario utilizzare entrambi, selezionare quello in cui è necessario gestirlo. Nota: in 'background.js' la funzione di callback riceve gli stessi parametri. – Blaise

+0

Il contentcript.js non funziona, non è possibile chiamare chrome api dagli script di contenuto, vedere questo per riferimento: https://stackoverflow.com/questions/24024682/google-chrome-exst-chrome-tabs-onupdated-addlistener – NycCompSci

Problemi correlati