Frage

Ich versuche, eine Chrome-Erweiterung zu erstellen, die als Ersatz für die Köstlicher Bookmarklet ist. Ich weiß, es ist schon eine Erweiterung, die es funktioniert, aber das Problem mit dieser Erweiterung ist, dass, nachdem Sie eine Website Lesezeichen, öffnen Sie das Popup-Fenster bleibt (im Gegensatz zu mit dem Bookmarklet Gegensatz, in dem das Fenster selbst schließt nach dem Absenden des Formulars. Ich neu erstellt der Erweiterung und lief in das gleiche Problem.

Hier ist mein Code:

manifest.json:

{
  "name": "Delicious",
  "version": "1.0",
  "description": "Bookmark a site on Delicious",
  "background_page": "background.html",
  "permissions": [ 
    "tabs" 
  ],
  "browser_action": {
    "default_icon": "delicious.png"
  },
  "content_scripts": [
    {
      "matches": ["http://www.delicious.com/save*"],
      "js": ["contentscript.js"]
    }
  ]
}

background.html:

<html><script>
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.getSelected(null, function(tab) {
    w = window.open('http://delicious.com/save?url='+
          encodeURIComponent(tab.url)+
          '&title='+encodeURIComponent(tab.title)+
          '&v=5&noui=1&jump=close',
        'deliciousuiv5',
        'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550');
  });
});
</script></html>

contentscript.js:

if (document.URL == 'http://www.delicious.com/save')
{
  alert('closing...');
  self.close();
  alert('should have closed by now');
}

Wenn ich die Köstlicher Schaltfläche klicken, kommt der Popup fein und ich kann das Lesezeichen speichern, aber nachdem ich auf „Speichern“, die Pop-up tut schließen nicht. Beide Warnungen zeigen, aber self.close() scheint nichts zu tun. Wenn ich den URL-Check in contentscript.js entfernen, wird das Popup als normal aufkommt, das erste Alarm Feuer sofort, und dann selbst das Popup schließt (wie es sein soll).

Warum funktioniert das nicht? Es scheint nicht wie Chrome daran hindert mich von self.close tun (). Ist köstlich, etwas zu tun? Ist es etwas anderes?

Die Dateien sind hier, wenn Sie sie wollen: [Link entfernt, da drop.io Geschäfts erlosch]

War es hilfreich?

Lösung

Versuchen window.close(), aber das würde wahrscheinlich entweder nicht funktionieren.

Wie Sie regelmäßige Fenster erstellen (anstatt Browser Aktion Popup), dann können Sie es schließen chrome.tabs.remove() von einer Hintergrundseite. Sie können dieses Fenster auch von einer Hintergrundseite erkennen. So etwas wie:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(changeInfo.status == "loading") {
        if(tab.url == "http://www.delicious.com/save") {
            chrome.tabs.remove(tabId);
        }
    }
});

Ich bin nicht sicher, wie Chrome behandelt erstellt Fenster obwohl - wie Tabs oder Fenster. Wenn als Fenster dann über Code wird ein wenig anders sein.

Andere Tipps

fand ich eine sehr einfache Arbeit um zu diesem. Sie legen nur die ausgewählten Registerkarte auf True und die Popup verschwindet, wie diese ...

// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.update(tab.id, { selected: true } )
});

Ich habe diese Lösung gefunden: chrome.tabs.update({ active: true }); Diese Zeile Code schließt den Browser Popup-Fenster-Aktion. Sie brauchen auch nicht, dass es passieren tab.id da standardmäßig es id des aktuellen Tab gesetzt. Ich betreibe es im Hintergrund Seite scheint aber kann es überall in der Verlängerung ausgeführt werden soll.

Arbeits GetSelected nicht für mich, so dass ich diese Lösung gefunden

chrome.tabs.create({url: 'https://www.google.com', active: false});

in background.js Sie müssen nur

window.close();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top