2016-06-22 7 views
0

Ich habe eine Chrome-Erweiterung, die ein Popup-Fenster erstellt, das der Benutzer für ein Anmeldesystem verwenden muss. Sie klicken auf das Erweiterungssymbol und es öffnet seine Anwendung (AngularJS in meinem Fall). Der Benutzer klickt dann auf eine Schaltfläche, die chrome.windows.create() aufruft, um ein Popup zu öffnen.URL des Popup-Fensters erhalten, das von einer Chrome-Erweiterung aus geöffnet wurde

Ich möchte die Haupterweiterung App die URL dieses Popup für Änderungen überwachen.

Ich schaffe das Popup aus der Erweiterung auf diese Weise:

chrome.windows.create(
    { 
     url: 'https://some.external.url.com/whatever', 
     type: 'panel', 
     width: 600, 
     height: 600 
    }, 
    function (windowReference) { 
     console.log('My Window:', windowReference); 
     // start monitoring URL of windowReference somehow 
     // could be as simple as a setInterval() loop 
    } 
) 

Das Problem ist, dass das windowReference Objekt an den Rückruf übergeben nicht die aktuelle URL des Popup haben. Da der Benutzer mit der Seite im Popup interagieren kann (ich zeige es auf das OAuth2-System), ändert sich die URL manchmal. Ich möchte das sehen - entweder aktiv, wenn Änderungen vorgenommen werden, oder einfach die aktuelle URL in regelmäßigen Abständen abfragen.

Dies ist, was das windowReference Objekt enthält:

{ 
    alwaysOnTop:false, 
    focused:false, 
    height:600, 
    id:1089, 
    incognito:false, 
    left:61, 
    state:"normal", 
    top:23, 
    type:"popup", 
    width:600 
} 

Sie können sehen, dass es eine ID ist, und dass, zu mir, lassen vermuten, dass ich eine andere Methode nennen könnte in der Lage sein, es zu benutzen Erhalte die echten URL-Informationen, nach denen ich suche.

Jede Hilfe wäre willkommen.

+0

Hinweis: ['chrome.tabs.query'] (https://developer.chrome.com/extensions/tabs#method-query) und die zugehörigen Ereignisse. –

+0

@RobW Ja, mir ist das vertraut. Aber wenn ich es verwende, erhalte ich die URL der Registerkarte, die geöffnet wurde, als ich die Erweiterung öffnete, und nicht des Popup-Fensters, das von der Erweiterungsanwendung selbst erstellt wurde (und sich nicht in einer Registerkarte befindet). –

+1

Ich vermute, dass Sie nicht versucht haben, es mit 'windowId: windowReference.id' aufzurufen? –

Antwort

0

Also die Antwort erweist sich als ziemlich einfach. Als Rob W erwähnt in einem Kommentar, verwenden Sie die chrome.tabs.query() Methode, um die Suche wie für jede andere Registerkarte zu tun.

für mich Der fehlende Teil war, dass Sie die id aus dem Fenster Referenz verwenden können Sie erhalten, wenn das Popup erstellt wird, um die gewünschten Ergebnisse aus der Registerkarten Abfrage zu erhalten:

chrome.tabs.query(
    { windowId: windowReference.id }, 
    function callback(tabs) { 
     var popup = tabs[0]; 
     $log.debug("Popup URL:", popup.url); 
    } 
); 

Sie können sehen, dass ich bestanden die ID als Wert des Parameters im Suchabfrageobjekt.

Verwandte Themen