2016-01-22 18 views
8

Piszę rozszerzenie Google Chrome, aby zautomatyzować niektóre typowe zadania. Funkcjonalność chcę się następująco:Jak słuchać zmian adresu URL za pomocą rozszerzenia Chrome

  1. Utwórz nową kartę i przejdź do mojego webmail
  2. wprowadzić nazwę użytkownika i hasło
  3. kliknij przycisk „Wyślij” Poczekaj, aż pojawi się strona webmail
  4. , a następnie wybierz klient "roundcube".

Mam wykonane kroki 1,2 i 3 i działają. Mam problem z próbą nasłuchiwania zmiany adresu URL po podaniu moich poświadczeń, aby funkcja wybierania klienta usługi roundcube mogła działać

Wiem, że mogę uruchomić skrypt po wyświetleniu strony wyboru klienta, dodając do mojego pliku manifestu ale chcę użyć "chrome.tabs.executeScript", aby wybrać roundcube tylko wtedy, gdy uruchamiam skrypt z rozszerzenia chrome, a nie, jeśli ręcznie przechodzę na stronę wyboru klienta.

Oto moja 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://*/*" 
    ] 
} 

Oto mój chrom scenariusz:

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

}); 

i tutaj jest skrypt zawartość być wykonywany jako zwrotnego stworzenia zakładki (gdy e-mail strona logowania jest pobierana, a moduł DOM załadowany), a także po przesłaniu poświadczeń e-mail i załadowaniu DOM strony wyboru klienta (obecnie nie działa).

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'); 
    } 
}() 

każda pomoc byłaby doceniana ... dzięki!

Odpowiedz

10

stosowanie 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

Dlaczego należy dwukrotnie dodawać tę lists.onUpdated listener, odpowiednio w pliku contentscript.js i background.js? – lsheng

+0

Nie musisz używać obu, wybierz ten, w którym chcesz go obsłużyć. Uwaga: W 'background.js' funkcja wywołania zwrotnego otrzymuje te same parametry. – Blaise

+0

Contentcript.js nie działa, nie można wywoływać api chrome ze skryptów treści, zobacz to w celach informacyjnych: https://stackoverflow.com/questions/24024682/google-chrome-exstension-chrome-tabs-onupdated-addlistener – NycCompSci