Wie verwende ich jquery in der Google Chrome-Erweiterungsseitenaktion background.js?

Lesezeit: 4 Minuten

Benutzer-Avatar
Benutzer

Ich entwickle eine Google Chrome-Erweiterung “Seitenaktion”. Mein Manifest hat:

...
"background": { "scripts": ["background.js"] },
...

In meiner background.js-Datei habe ich:

function doSomething() {
     alert("I was clicked!");
}

chrome.pageAction.onClicked.addListener(doSomething);

Das funktioniert. Jetzt in meiner doSomething Funktion Ich möchte einige Daten auf der aktuellen Seite lesen. Es wird für mich viel einfacher sein, jquery zum Lesen der Daten zu verwenden, sodass ich problemlos genau auf die gewünschten Daten abzielen kann. Wie kann ich jquery (vorzugsweise von Googles CDN bereitgestellt) integrieren, damit es für meine zugänglich ist doSomething Funktion?

Benutzer-Avatar
Jaydeep Solanki

Das "background" Spezifikation ein manifest.json angeben soll jquery.js damit es vorher geladen wird background.js:

...
"background": { "scripts": ["jquery.js","background.js"] },
...

Dies sollte die Arbeit erledigen.
Denken Sie daran, dass die js-Dateien in der angegebenen Reihenfolge geladen werden.

testen, ob jquery geladen ist.

in background.js

if (jQuery) {  
    // jQuery loaded
} else {
    // jQuery not loaded
}

  • stackoverflow.com/questions/27542186/… Können Sie mir bitte sagen, was ich falsch mache?

    – Tote Kuh

    18. Dezember 2014 um 8:39 Uhr


  • Hier erfahren Sie, wie Sie JQuery mit Ihrem Hintergrundskript laden, aber beachten Sie die anderen Antworten … Sie können nicht auf das DOM der aktiven Webseite zugreifen. Sie können auf $(document) zugreifen, aber das ist die Hintergrund-HTML-Seite.

    – PMorganCA

    15. April 2016 um 20:14 Uhr

  • Wenn ich Ihren Test in meinem content_script (nicht im Hintergrund) verwendet habe, würde ich eine Ausnahme erhalten, die besagt, dass jQuery nicht definiert ist. Ich musste umsteigen if (typeof jQuery !== 'undefined') um tatsächlich zu prüfen, ob jQuery definiert wurde.

    – Chip Thien

    28. Dezember 2016 um 19:29 Uhr

  • Warum steht deine Antwort nicht oben?

    – Anwar Hossain

    10. August 2019 um 16:20 Uhr

  • Das Lustige ist, dass ich auch jquery in background.js verwendet habe, aber $.get() scheint nicht wie erwartet als content.js zu funktionieren

    – Gumuruh

    17. September 2019 um 7:30 Uhr

Benutzer-Avatar
Benutzer

Ich weiß nicht, ob dies der ideale Weg ist, aber ich konnte es mithilfe dieser Frage zum Laufen bringen: Google Chrome Extensions: How to include jQuery in programatically injection content script?.

Anscheinend kann eine “Hintergrund”-Javascript-Seite nicht auf das DOM einer Webseite im Browser zugreifen, sodass das Laden von jquery im Hintergrundskript nicht wirklich sinnvoll ist. Stattdessen habe ich das Hintergrundskript programmgesteuert injizieren die jQuery-Bibliothek und dann das Inhaltsskript in die aktuelle Webseite. Das Inhaltsskript (im Gegensatz zum Hintergrundskript) kann Zugriff auf Informationen auf der Webseite.

hintergrund.js:

function handleClick(tab) {
    chrome.tabs.executeScript(null, { file: "jquery-1.8.2.min.js" }, function() {
        chrome.tabs.executeScript(null, { file: "content.js" });
    });
}

chrome.pageAction.onClicked.addListener(handleClick);

content.js

var text = jQuery('h1').text();
alert('inside content! ' + text);

  • Sie können JQuery weiterhin für Ajax-Aufrufe usw. verwenden. Es ist nicht unbedingt nutzlos, JQuery für background.js zu verwenden

    – Nullschreiber

    7. Mai 2015 um 19:34 Uhr

Mein Verständnis ist, dass es nicht notwendig ist, background.js zu verwenden. Sie können Ihren Code stattdessen in popup.js haben. Daher müssen Sie auch nichts in die Manifestdatei aufnehmen.

Ich würde vorschlagen, das jQuery JS und Ihre popup.js in Ihre popup.html aufzunehmen:

<script src="https://stackoverflow.com/js/jquery-1.8.1.min.js"></script>
<script src="/js/popup.js"></script>

Dann sollten Sie in popup.js auf jQuery zugreifen können, sodass Ihr eventHandler so aussehen würde:

$(document).ready(function(){
 $('#anyelement').on('click', doSomething);

 function doSomething(){
   alert ('do something');
 };
})

Ich denke nicht, warum Sie CDN für jQuery wollen, alle Dateien werden auf dem Computer des Benutzers gehostet.

Ich hoffe, es hilft, Rob

  • guter Punkt, kein CDN zu benötigen. Was ist popup.html? Ich weiß nicht, was das ist. Zur Verdeutlichung wird der Onclick ausgelöst, wenn der Benutzer auf das Symbol der Seitenaktion klickt.

    – Benutzer

    25. Oktober 2012 um 9:07 Uhr


  • popup.html ist der HTML-Inhalt, der „auftaucht“, wenn Sie in Chrome auf Ihr Erweiterungssymbol klicken.

    – robertp

    25. Oktober 2012 um 9:19 Uhr


  • Ok, dann versuchen Sie die Lösung von @Archer oben, das könnte für Sie besser sein.

    – robertp

    25. Oktober 2012 um 9:33 Uhr

  • Dies ist in der Chrome-Erweiterung nicht zulässig.

    – Schiwa

    14. Juli 2021 um 9:19 Uhr

Stellen Sie in der Manifestdatei sicher, dass Sie auf Ihre lokale jquery.js-Datei (wie auch immer sie heißt) in der content_scripts Block:

"content_scripts": [{
    "js": ["jquery.js"]
}]

Dadurch wird sichergestellt, dass es in die crx-Datei eingebettet und für Ihre anderen Skripts zugänglich ist.

1227770cookie-checkWie verwende ich jquery in der Google Chrome-Erweiterungsseitenaktion background.js?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy