최선의 방법은 무엇일을 부르는 콘텐츠 스크립트의 함수에서 배경은 스크립트에 Firefox extension?

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 prop:

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()배경에서 작업 스크립트에서 당신의 코드? 를 얻을 포착되지 않는(에서 약속한다)TypeError:tabInfo 가 정의되지 않은 오류가 있습니다. 나는에서 읽 습니다.getCurrent() 문서를 참고: 이 함수에서만 유용하는 컨텍스트가 브라우저 탭에서,같은 옵션 페이지를 참조하십시오. 만약 당신이 그것을 부에서 배경은 스크립트 또는 팝업이 반환됩니다 undefined.
Costas

내장지 않을 경우 작동하지 않았다. 나의 코드만의 예는 어떻게 작동해야,그리고 함께 작동하는 나의 배경은 스크립트입니다. 어떤 데이터가 당신고서 tabs.getCurrent()?
Andy

@코스타가 조금 나의 코드가 누락되었(의 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

나는 그냥 보면 확장자 다시 몇 분 전에 디버거 개발자 도구에서 나오는 배경은 스크립트는 로드! 는 문제입니다. 콘텐츠 스크립트는 전혀로드되지 않습니다. 나지도 않지만,나는 보이지 않는 어떤 문제에서 manifest.json 파일입니다.
Costas

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................