4

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

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

main.js

 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;

        }); 
}

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

4

1 回答 1

2

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

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

于 2012-09-18T11:42:35.233 回答