使用 self.port.on 时,firefox 内容脚本中的变量未更新

Variable not updating in firefox content script when using self.port.on

我正在尝试更新版本 var,但它并没有按照我认为应该的方式工作。例如,当我这样做时:

self.port.on("get-version", ver => { version = ver; alert(version); });

我收到一个关于版本号的警告,但是 HTML 仍然是 0.0.0,我用它来定义内容脚本开头的版本变量。

main.js

pageMod.PageMod({
    include: "https://na6.salesforce.com/500?fcf=00B8000000*",
    contentStyleFile: ["./css/salesforceoverlay.css"],
    contentScriptFile: ["./external/jquery/jquery-1.11.3.min.js", "./js/salesforceoverlay.js"],
    onAttach: function(worker) { worker.port.emit('get-version', self.version); }
});

内容-script.js

var version = "0.0.0";
self.port.on("get-version", ver => { version = ver; alert(version); });


$("body").append("<div id='helpSection' class='overlay'>\
    <p><b>Salesforce Overlay: " + version + "</b>\

    //more paragraphs/text and such... 

    </p>\
</div>");

您只是在更新变量,而不是过去从该变量派生的任何内容,即HTML内容。

这与 FF 插件代码无关,它是 属性 HTML DOM 和 javascript 的一般工作方式。

Javascript 承诺就是答案。从那以后,我将其重写为当前的网络扩展格式,因此代码消失了,但问题出在 synchronous/asynchronous 代码上。 Javascript 承诺通过强制同步行为解决了我的问题。