簡體   English   中英

Firefox WebExtensions將消息從瀏覽器發送到擴展,並在回調函數中獲得響應

[英]Firefox WebExtensions send message from browser to extension and get response in call back function

我正在嘗試將Chrome擴展程序轉換為FireFox WebExtensions。 我的網頁與后台腳本之間的通信存在問題。 從內容腳本我將一些功能注入瀏覽器頁面。 該函數需要調用瀏覽器擴展並獲得響應。

的manifest.json

{
"manifest_version" : 2,
"name" : "Sample",
"description" : "Sample",
"version" : "1.0",

"icons" : {
    "48" : "icons/link-48.png"
},

"applications" : {
    "gecko" : {
        "id" : "sample@sss.com",
        "strict_min_version" : "48.0"
    }
},

"permissions" : ["notifications", "alarms", "storage"],

"background" : {
    "scripts" : [
        "js/jquery.js",
        "background-script.js"
    ]

},
"web_accessible_resources" : ["js/content.js"], // Not working in firefox
"externally_connectable" : {
    "matches" : [
        "http://localhost/*",]
},
"content_scripts" : [{
        "matches" : ["<all_urls>"],
        "js" : ["js/jquery.js",
            "js/script.js",
            "content-script.js"
        ],
        "run_at" : "document_start"
    }
],
"default_locale" : "en"
}

內容的script.js

var port = chrome.runtime.connect();

window.addEventListener("message", function(event) {

if (event.source != window)
    return;

if (event.data.type && (event.data.type == "FROM_PAGE")) {
    console.log("Content script received: " + event.data.text);
    chrome.runtime.sendMessage({
        hello: 1
    },function (response)
    {
        //Need to send response back to browser
    });
}
}, false);

背景的script.js

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
    alert('bg');
    var response_Text = '-1';

    if (request.hello) {
        console.log('hello received');
        sendResponse("213");
    }
});

瀏覽器頁面

window.postMessage({ type: "FROM_PAGE", text: "Hello from the webpage!" },"*");

我正在使用window.postMessage發送一些內容。

是否有可能獲得此功能的回調值或任何可用於從網頁向分機發送消息並獲得響應的方法?

瀏覽器頁面

將回調轉換為String並附加detail參數

var callbackstring=callback.toString(); *

和發送一樣

var evt = document.createEvent("CustomEvent");
evt.initCustomEvent("eventname", true, true, {callback:callbackstring});
window.dispatchEvent(evt);

內容腳本

從事件對象中檢索回調串

var callbackstring=event.detail.callback;

使用eval函數並將字符串轉換為函數

eval("var callback="+callbackstring);

現在,您可以在偵聽器中輕松觸發回調

callback(response);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM