8 Stimmen

Chrome.browserAction.onClicked.addListener() mit Popup

Ich möchte einen Listener zum Ereignis hinzufügen, das jedes Mal ausgelöst wird, wenn auf das Browser-Symbol geklickt wird. Ich habe auch ein Popup, das beim Klicken auf dieses Symbol erscheint.

Ich habe chrome.browserAction.onClicked.addListener() ausprobiert, aber es hat nicht ausgelöst. Später habe ich gesehen, dass im Dokument steht:

Wird ausgelöst, wenn auf ein Browser-Aktionssymbol geklickt wird.
Dieses Ereignis wird nicht ausgelöst, wenn das Browser-Action ein Popup hat.

Also habe ich ein Popup, deshalb funktioniert dieser Listener nicht. Welchen Umweg kann ich machen, um in meinem Fall einen Listener an das Symbol anzuhängen?

10voto

Xan Punkte 71077

Es gibt keinen Workaround, um einen Listener an dieses Ereignis anzuhängen, aber stattdessen können Sie Nachrichten verwenden, um Ihrer Hintergrundseite mitzuteilen, dass das Popup geöffnet wurde.

In Ihrem Popup, so schnell wie möglich:

chrome.runtime.sendMessage({popupOpen: true});

In Ihrer Hintergrundseite:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
  if(message.popupOpen) { /* tun Sie Ihr Ding */ }
});

1voto

Jon Punkte 7708

Ich brauchte etwas ausführlicheres für die Antwort von @Xan, also hier ist, was ich gemacht habe:

Hier ist meine index.html

  Ahead of time compilation

Loading...

Hier ist popup.js

chrome.runtime.sendMessage({popupOpen: true});

Hier ist manifest.json

{
  "manifest_version": 2,
  "name"            : "Test ang 2",
  "description"     : "jons test",
  "short_name"      : "test",
  "version"         : "1.0",
  "browser_action": {
    "default_icon" : "app/assets/icon.png",
    "default_title": "hi jon",
    "default_popup": "index.html"
  },
  "permissions": [
    "debugger",
    "activeTab",
    "tabs",
    "alarms",
    "clipboardWrite",
    "notifications",
    "background",
    "storage",
    "cookies",
    "https://*/",
    "http://*/"
  ],
  "web_accessible_resources": [
    "assets/*",
    "bower_components/*",
    "components/*",
    "app.module.js",
    "app.routes.js",
    "index.html",
    "app/*"
  ],
  "externally_connectable": {
    "matches": [
      "*://*.capitalone.com/*"
    ]
  },
  "background": {
    "scripts":["background.js"]
  },
  "content_scripts": [
    {
      "matches": [
        ""
      ],
      "js": ["content-scripts.js"]
    }
  ],
  "content_security_policy": "script-src 'self' ; object-src 'self'"
}

Hier ist background.js

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
  console.log(message);
  alert('hello world');
  if(message.popupOpen) {
    console.log('popup is open');
  }
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X