Webextensions API - 将数据从后台脚本传递到 devtools 面板

Webextensions API - Pass data from background-script to devtools panel

我正在尝试将 Firefox Webextensions API 中的 POST 数据从后台脚本传递到我的自定义开发工具面板。

我得到了这样的 POST 数据:

browser.webRequest.onBeforeRequest.addListener( 
    getPostData, 
    { urls: ['<all_urls>'], types: ["main_frame"] }, 
    ['requestBody']
);

function getPostData( e )
{
    if( e.method == 'POST' )
    {
        window.postData = e.requestBody.formData;
        // do something...
    }
}

首先,我尝试使用 sendMessage 传递数据,但它需要在页面加载时打开 devtools,而我不希望那样。

然后,我尝试使用 runtime.getBackgroundPage(),但出现 getBackgroundPage is not a function 错误。

后来,我考虑过使用 Storage 保存数据,但我不确定该怎么做(以前从未做过),而且我认为这不是正确的方法。

有什么想法吗?我很困惑,尤其是因为这是我的第一个 Webextension。

我找到了一个不错的解决方案:

background.js 我有这个代码:

var postData = '';

// get POST data for each loaded page
browser.webRequest.onBeforeRequest.addListener(
    getPostData,
    { urls: ['<all_urls>'], types: ['main_frame'] }, 
    ['requestBody']
);

// listen to messages from devtools panel
browser.runtime.onMessage.addListener( ( message, sender, sendResponse ) => {

    switch( message.action )
    {
        // return POST data to devtools panel
        case 'getPostData':
            sendResponse({
                postData: postData
            });
            break;

        default:
            break;
    }

});

在我的 devtools.js 中我有这个代码:

let sending = browser.runtime.sendMessage({
    action: 'getPostData'
});

sending.then(

    response => {
        console.log( response.postData );
    },

    error => {
        console.error( error );
    }

);

希望对以后的人有所帮助。