여러 개의 함수를 호출하여 chrome.런타임입니다.sendMessage()와 동기식 행동

0

질문

연결 content.js 가 background.js 지 2 개의 서로 다른 작업을 주입한 로컬 HTML 과 데이터를 가져올 때 다른 웹 페이지입니다. 현재 createContainer() 후에 시작 fetchweb() 완료하고 나가지(요 createContainer() 을 실행하는 첫 번째). 했을 변환하는 두 가지 기능으로 약속을 하지만 여전히 동일한 결과

Content.js

function createContainer1() {
    // call html file container
    chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) {
        $("#container1").html(html);
    });
    // more code
}
    
function fetchWeb() {
    chrome.runtime.sendMessage(
        { cmd: "send_url", url: window.location.href},
        function (response) {
            console.log(JSON.stringify(response));
        }
    );
}

createContainer1()
fetchWeb()

background.js

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    if (request.cmd == "read_cont1") {
        $.ajax({
            url: chrome.extension.getURL("container1.html"),
            dataType: "html",
            success: sendResponse,
        });
        return true;
    } else if (request.cmd == "send_url") {
        sendResponse({ review_url: fetchData(request.url) });
        return true;    
    }
});
google-chrome-extension javascript
2021-11-18 10:43:15
1

최고의 응답

1

당신의 두 sendMessages 은 모두 비동기 기능 및--지 않는 한 특히 다루는 비동기 코딩을 통해 콜백,약속 또는 비동기/여--지가 있다고 생각하지 않는 다른 방법을 보장하는 해결합니 처음이다.

는 경우 fetchWeb 실행해야 하는 모든 시간 후 createContainer 보내는 메시지를 추가할 수 있습니다 fetchWeb sendMessage 의 콜백(그리고 그 제거에서 본체):

...chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) {
    $("#container1").html(html);
    fetchWeb();
});...

는 경우 fetchWeb 해야만 때로는 실행할 수 있습을 통과 데이터를 createContainer 함수 응답되는 질문:

function createContainer1(executeFetchWeb) {
    // call html file container
    chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) {
        $("#container1").html(html);
        if (executeFetchWeb) {fetchWeb()}
    });
    // more code
}

는 경우 다른 무언가가 있어"//더 많은"코드는 일이 필요하기 전에 fetchWeb 실행하면 도움이 될 것입니다. 그러나지 않으면 해당 코드는 비동기식뿐만 아니라,내가 상상하는 코드가 이미 실행이 처음이다. 이 모두 수행 약속을 뿐만 아니라,하지만 sendMessage 은 이미 설치하는 잘 콜백이 있습니다. 에서 설명서:

chrome.runtime.sendMessage(
  extensionId?: string,
  message: any,
  options?: object,
  responseCallback?: function,
)
2021-11-21 02:51:53

다른 언어로

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

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