消息可以包含任何有效的 JSON 对象(空值、布尔值、数字、字符串、数组或对象)
chrome 扩展规范表明在后台和内容脚本之间传递的消息可以是一个 Javascript 对象,这意味着我们可以在不使用 JSON.stringify 的情况下传递一个 Javascript 对象。这是否意味着 Chrome 在发送消息之前会在内部执行 JSON.stringify?如果没有,如果我只是在没有 JSONification 的情况下传递 Javascript 对象,是否会提高性能?
消息可以包含任何有效的 JSON 对象(空值、布尔值、数字、字符串、数组或对象)
chrome 扩展规范表明在后台和内容脚本之间传递的消息可以是一个 Javascript 对象,这意味着我们可以在不使用 JSON.stringify 的情况下传递一个 Javascript 对象。这是否意味着 Chrome 在发送消息之前会在内部执行 JSON.stringify?如果没有,如果我只是在没有 JSONification 的情况下传递 Javascript 对象,是否会提高性能?
在 Chrome 中,消息JSON.stringify
在 Chrome 的 JavaScript shim 层中自动 JSON 序列化(字面意思是使用),该层与扩展程序交互,如messages.js的源代码中所示。
这同样适用于在Port
内部使用基于消息的chrome.runtime.sendMessage 和 chrome.tabs.sendMessage 。
这意味着只传递对象的 JSON 兼容部分:字符串、数字、布尔值、空值和由列出的类型组成的对象/数组。不支持复杂类型,将作为空对象发送,{}
例如 DOM 元素、Set、Map、类实例、函数等。
希望 Chrome 有一天能够直接发送更多类型,请参阅https://crbug.com/248548。
在 Firefox 中,使用了结构化克隆算法,它保留了许多流行的复杂类型,如 Date、RegExp、Blob、File、ArrayBuffer、Map、Set 等。