क्या सबसे अच्छा तरीका है फोन करने के लिए एक सामग्री लिपियों' समारोह पृष्ठभूमि से स्क्रिप्ट में एक Firefox विस्तार?

0

सवाल

मैं कॉल करना चाहते हैं कि एक समारोह है में लागू सामग्री स्क्रिप्ट का एक विस्तार हो जाता है कि, चयनित पाठ से वेबपृष्ठों से एक समारोह पृष्ठभूमि में स्क्रिप्ट हो जाएगा कि बाद में कहा जाता है में एक श्रोता कनेक्ट करने के लिए एक मेनू आइटम है ।

है कि संभव है और क्या होगा के लिए सबसे छोटा रास्ता क्या है?

यहाँ प्रासंगिक कोड के टुकड़े:

manifest.json

 "background": {
    "scripts": ["background.js"]
  },
  
  "content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["content.js"]
  }
]

content.js

var text = "";
    
function highlightedText() {
  text = content.getSelection();
}

background.js

function listenerFunction() {

    highlightedText();
    
    /* Doing various stuff that have to use the text variable */
  }
  
    browser.menus.onClicked.addListener((info, tab) => {
    highlightedText();
  });

जाहिर है, ऊपर कोड काम नहीं कर रहा है के रूप में "प्रकाश डाला" समारोह अब से दिखाई पृष्ठभूमि स्क्रिप्ट.

तो, क्या सबसे तेज / सबसे छोटा रास्ता बनाने के लिए कोड काम करता है?

1

सबसे अच्छा जवाब

1

ठीक है । मैं कर रहा हूँ करने के लिए पालना से यह अपनी खुद की एक निजी एक्सटेंशनों लेकिन सार यह है:

पृष्ठभूमि में स्क्रिप्ट सेट अप मेनू, और आवंटित करने के लिए एक समारोह onclick सहारा:

browser.menus.create({
  id: 'images',
  title: 'imageDownload',
  contexts: ['all'],
  onclick: downloadImages
}, onCreated);

अभी भी में एक ही स्क्रिप्ट वर्तमान टैब की जानकारी, और एक संदेश भेजने के लिए सामग्री स्क्रिप्ट.

function getCurrentTab() {
  return browser.tabs.query({ currentWindow: true, active: true });
}

async function downloadImages() {
  const tabInfo = await getCurrentTab();
  const [{ id: tabId }] = tabInfo;
  browser.tabs.sendMessage(tabId, { trigger: 'downloadImages' });
}

सामग्री स्क्रिप्ट के लिए सुनता है संदेश:

browser.runtime.onMessage.addListener(({ trigger }) => {
  if (trigger === 'downloadImages') doSomething();
});

और एक बार प्रसंस्करण किया जाता है के पास एक नया संदेश वापस पृष्ठभूमि करने के लिए स्क्रिप्ट ।

function doSomething() {
  const data = [1, 2, 3];
  browser.runtime.sendMessage({ trigger: 'downloadImages', data });
}

और एक अलग पृष्ठभूमि स्क्रिप्ट मैं निम्नलिखित की तरह कुछ:

browser.runtime.onMessage.addListener(function (data) {
  const { trigger } = data;
  if (trigger === 'downloadImages') ...
});
2021-10-29 12:40:02

करता है टैब.getCurrent() पृष्ठभूमि में काम स्क्रिप्ट में अपने कोड? मैं एक Uncaught में (वादा) TypeError: tabInfo अपरिभाषित है त्रुटि. मैं पढ़ने में टैब.getCurrent() प्रलेखन: ध्यान दें: इस समारोह में केवल उपयोगी संदर्भों में वहाँ है, जहां एक ब्राउज़र टैब में, इस तरह के रूप में एक विकल्प पृष्ठ. यदि आप इसे से एक पृष्ठभूमि स्क्रिप्ट या एक पॉपअप में, यह वापस आ जाएगी undefined.
Costas

मेरा एक्सटेंशन काम नहीं होगा यदि यह नहीं था. मेरे कोड केवल एक उदाहरण है कि यह कैसे काम करना चाहिए, और काम करता है कि मेरी पृष्ठभूमि के साथ स्क्रिप्ट. क्या डेटा आप कर रहे हैं से हो रही है tabs.getCurrent()?
Andy

@Costas मैं का एक सा जोड़ा मेरे कोड याद आ रही थी कि (के getCurrentTab समारोह के साथ). उम्मीद है कि मदद मिलेगी ।
Andy

मैं हो रही थी undefined जाहिर है, क्योंकि tabs.getCurrent() लौट रहा था undefined. अपने कोड के साथ फिक्स्ड त्रुटि । अब मैं कर रहा हूँ एक Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist इस लाइन से कोड की: browser.tabs.sendMessage(tabId, { trigger: 'downloadImages' }); मैं इस कोड के बारे में: browser.runtime.onMessage.addListener(({ trigger }) => { if (trigger === 'downloadImages') doSomething(); }); सामग्री में स्क्रिप्ट है, लेकिन स्पष्ट रूप से यह नहीं देखा पृष्ठभूमि से स्क्रिप्ट.
Costas

आप से पूछा के लिए एक उदाहरण के लिए, मैं तुम्हें दे दिया । यह पता चलता है की मूल बातें के बारे में संदेश है, जो है क्या आप के लिए कहा. इस कोड को फिट नहीं हो सकता है अपनी आवश्यकताओं के विशेष रूप से - आप सिर्फ काम करने के लिए है, यह चारों ओर एक छोटे से फिट करने के लिए अपने कोड. अभी उठा नहीं है कोड से इस सवाल का जवाब और यह उम्मीद करने के लिए काम करते हैं. लगता है के बारे में आप अनुकूलित कर सकते हैं कोड के लिए अपनी आवश्यकताओं फिट.
Andy

मैं सिर्फ एक को देखो एक्सटेंशन फिर से कुछ मिनट पहले... डिबगर में, में Devtools मैं देख रहा हूँ कि केवल पृष्ठभूमि स्क्रिप्ट भरी हुई है! इतना है कि यह एक समस्या है । सामग्री स्क्रिप्ट लोड नहीं करता है सब पर. मैं नहीं मिलता है क्यों हालांकि, के रूप में मैं देख नहीं है किसी भी समस्याओं में manifest.json फ़ाइल.
Costas

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में