Wie kann ich mit Chrome Extension auf eine Änderung der URL warten?

Ich schreibe eine Google Chrome-Erweiterung, um einige häufige Aufgaben zu automatisieren. Die Funktionalität, die ich möchte, ist wie folgt:

Erstelle einen neuen Tab und navigiere zu meiner WebmailNutzernamen und Passwort eingebenKlicke auf "Senden"Warten Sie, bis die Webmail-Seite angezeigt wird, und wählen Sie den Client "roundcube" aus.

Ich habe die Schritte 1, 2 und 3 ausgeführt und sie funktionieren. Ich habe große Probleme beim Abhören der URL-Änderung, nachdem meine Anmeldeinformationen übermittelt wurden, damit die Funktion, die den Roundcube-Client auswählt, ausgeführt werden kann.

Ich weiß, dass ich ein Skript ausführen kann, wenn die Clientauswahlseite durch Hinzufügen zu meinem Manifest angezeigt wird, aber ich möchte stattdessen "chrome.tabs.executeScript" verwenden, sodass roundcube nur ausgewählt wird, wenn ich das Skript über die Chrome-Erweiterung ausführe, und nicht, wenn ich Gehen Sie manuell zur Kundenauswahlseite.

Hier ist meine 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://*/*"
  ]
}

Hier ist mein Chrome-Skript:

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

});

und hier ist das Inhaltsskript, das als Rückruf der Registerkartenerstellung ausgeführt werden soll (wenn die E-Mail-Anmeldeseite abgerufen und das DOM geladen wurde), und auch, wenn die E-Mail-Anmeldeinformationen übermittelt und das DOM der Clientauswahlseite geladen wurden (das heißt) funktioniert gerade nicht)

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

Jede Hilfe wäre dankbar ... danke!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage