Programim dhe zhvillim, javascript, python, php, html

Dërgo mesazh nga skripti i sfondit në skriptin e përmbajtjes dhe më pas përgjigju në shtesën e kromit

Po përpiqem të bëj një shtesë kromi. Skripti im i sfondit aktivizohet me shtypjen e një butoni në UI. Ai duhet të dërgojë një mesazh në skriptin tim të përmbajtjes, i cili do të dërgojë një përgjigje përsëri në skenarin e sfondit. Nuk mund ta kuptoj se si duhet të funksionojë kjo. Dëgjuesi i klikimeve po ndez, por mesazhet nuk funksionojnë. Ja çfarë kam marrë deri tani:

Skript i sfondit:

$(document).on('click', '#getGlobalFuncsBtn', function(){
    chrome.extension.sendMessage({text:"getStuff"},function(reponse){       
        if(reponse.type == "test"){
            console.log('test received');
        }
    });
    console.log('click listener');
});

Skript i përmbajtjes:

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
    if(message.text == "getStuff"){
        console.log('test sent');
        sendResponse({type:"test"});
    }
});

HTML kërcyese:

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<button id="getGlobalFuncsBtn">Get Global Funcs</button>

<script src="jquery-2.0.2.min.js"></script>
<script src="background.js"></script>
</body>
</html>

manifest.json:

{
  "manifest_version": 2,

  "name": "Var Viewer",
  "description": "This extension allows you to view and change all user defined js global vars.",
  "version": "1.1",
  "permissions": [
    "storage"
  ],
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js": ["jquery-2.0.2.min.js","content.js"]
    }
  ],
  "web_accessible_resources": [
    "jquery-2.0.2.min.js"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  },
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "pop.html",
    "default_title": "Var Viewer"
  }
}

Përgjigjet:


1

1) Para së gjithash, po përpiqeni të aktivizoni ngjarjen e klikimit të butonit getGlobalFuncsBtn brenda skriptit të sfondit, gjë që është e pakuptimtë. Në fakt, ju po deklaroni background.js dy herë: herën e parë brenda skedarit manifest:

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

(që do të thotë se është një skenar në sfond)

, herën e dytë brenda popup.html:

<script src="background.js"></script>

(që do të thotë se është një skedar JavaScript kërcyes)

Background page është një vend ku kryeni vetëm disa veprime në sfond (për shembull, llogaritjet). popup.html është dritarja juaj aktuale popup, kështu që është vendi ku duhet të punoni me butonin duke përdorur jQuery. Në përgjithësi, thjesht duhet të fshini fushën background në manifest.json (dhe do të ishte mirë të riemërtoni background.js në diçka si popup.js, por nuk është e nevojshme).

(Skripti juaj i sfondit aktivizohet me shtypjen e butonit sepse e keni deklaruar një herë siç duhet - brenda popup.html.)

Mund të lexoni më shumë rreth background pages në dokumentacionin zyrtar: http://developer.chrome.com/extensions/background_pages.html.

2) Problemi juaj i dytë është me dërgimin e mesazhit midis faqes shtesë (mund të jetë çdo faqe shtesë, në copat tuaja të kodit është background.js) dhe content script. Nëse dëshironi të vendosni kanalin e komunikimit midis dy faqeve të rregullta shtesë, është shumë e thjeshtë. Përdorni chrome.runtime.sendMessage dhe chrome.runtime.onMessage.addListener. Megjithatë, nëse doni të komunikoni me content script, duhet të përdorni pak më të komplikuar duke përcaktuar tab të veçantë të cilës po i dërgoni mesazh (content script në fakt ekzekutohet si pjesë e kodit të skedës që keni specifikuar në skedarin manifest). Kodi juaj duhet të jetë diçka si kjo:

background.js (ose popup.js nëse e riemërtoni):

// code below is supposed to be inside your button trigger
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.sendMessage(tabs[0].id, {text:"getStuff"}, function(response) {
    if(response.type == "test"){
      console.log('test received');
    }
  });
});

Dëgjuesi i ngjarjeve Content script duket i njëjtë për extension page ose content script, kështu që kodi juaj content.js duhet të funksionojë siç duhet ashtu siç është. Ju vetëm duhet të zëvendësoni extension me runtime:

in content.js:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.text == "getStuff") {
      console.log('test sent');
      sendResponse({type: "test"});
    }
});

Lexova mirë për mesazhin që kalon në Chrome extension: http://developer.chrome.com/extensions/messaging.html.

05.01.2014
  • Unë mendoj se gjithçka që theksuat duhet të jetë e saktë minus një gjë. Mendoj se më duhej të rendisja content.js brenda web_accessible_resources të skedarit të manifestit. Nëse nuk është e listuar atje, nuk mund të përdoret si një skript i përmbajtjes. Unë kam provuar runtime.onMessage dhe tabs.query përpara se nuk funksionoi kurrë për shkak të këtij fakti. Faleminderit për ndihmën edhe pse nuk e dija këtë për injektimin e skriptit bg dy herë. Gëzuar. :) 05.01.2014
  • Sapo zbulova gjithashtu se skripti kërcyes rifreskohet (nëse bëni ndryshime në të) thjesht duke rihapur dritaren kërcyese (duke supozuar se keni bërë ndryshime në të dhe e keni ruajtur dhe e keni ngarkuar si një shtesë të papaketuar), por skenari i përmbajtjes merr vetëm rifreskohet duke riinstaluar shtesën. Butoni i zgjerimeve të përditësimit në fakt nuk e përditëson atë. 05.01.2014
  • @carter Po, ke të drejtë. Content script në fakt po funksionon veçmas nga shtesa. Është më afër kodit të skedave sesa skedarët shtesë, kështu që ju duhet të ringarkoni shtesën në mënyrë që të detyroni të zbatohen ndryshimet e kodit content script. 05.01.2014
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..