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

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

本文关键字:脚本 变量 更新 port self on 火狐 使用      更新时间:2023-09-26

我正在尝试更新版本 var,但这并没有按照我的想法工作。例如,当我这样做时:

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

我收到带有版本号的警报,但 HTML 仍然是 0.0.0,我用它来定义内容脚本开头的版本变量。

主.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); }
});

内容脚本.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承诺就是答案。此后,我将其重写为当前的Web扩展格式,因此代码消失了,但是问题出在同步/异步代码上。Javascript承诺通过强制同步行为解决了我的问题。