message - 内容脚本和主插件脚本之间的同步通信 - FireFox 插件 sdk

标签 message firefox-addon-sdk synchronous content-script

有没有办法在内容脚本和主插件脚本之间进行同步通信?

如果我创建了这样的方法,那么该方法会立即返回。那么有没有什么办法可以等待主脚本响应,然后处理结果呢?

主文件

 worker.port.on("GetValue"),function(key)
 {
     worker.port.emit('GetValue',ss.storage[key]);
 }

内容脚本
//get value from local storage

function GetValueFromLocalStorage(key) 
{
    self.port.emit("GetValue", key);

    self.port.on("GetValue", function (value) 
        { 
                return value;

        }); 
}

如果这是可能的,那将是有益的,因为异步代码不干净、不组织并且编写起来是一场噩梦,尤其是当我必须多次访问此方法时。

最佳答案

不可以,附加 SDK 设计为仅允许异步通信。最初的想法是最终基于 SDK 的扩展将在单独的进程中运行,而内容脚本必须在网页的进程中运行。不确定这个计划是否仍在实现,但这可能是异步 API 的主要原因 - 否则在不破坏所有扩展的情况下更改为多进程是不可能的。

显然,您可以使用低级 API,尤其是 chrome authority直接和同步访问网页。但是,如果代码可读性是您研究此问题的唯一原因,那么您将离开记录良好且受支持的领域,这可能不是最好的主意。

关于message - 内容脚本和主插件脚本之间的同步通信 - FireFox 插件 sdk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475437/

相关文章:

java - 创建弹出消息

c - 执行break后切换大小写命令

javascript - 使 Firefox 中的面板永远保持打开状态

import - require.js 同步加载

jquery - 加载器在 chrome 中的同步 ajax 调用期间不工作

python - 如何使用 python smtplib 向多个收件人发送电子邮件?

dataframe - Pyspark:序列化任务超过允许的最大值。考虑增加 spark.rpc.message.maxSize 或对大值使用广播变量

javascript - 使用附加 SDK 更改选项卡样式

javascript - Firefox 扩展中如何发出函数?

asynchronous - Flutter,功能需要等到数据可用