我遇到了一个问题,我在内容脚本中创建了一个RegExp
对象,并使用self.port.emit()
将其作为对象的一部分传递回主脚本。
在某个地方它似乎失去了它作为RegExp的身份以及它的toString能力。以下内容在主脚本中返回false,但在内容脚本中为true:
Object.prototype.toString.call(regexp) == '[object RegExp]';
regexp instanceof RegExp;
有趣的是,对于以相同方式传递的数组,以下是正确的:
Object.prototype.toString.call(array) == '[object Array]';
我错过了什么吗?
答案 0 :(得分:1)
如果你刚刚发送了正则表达式而不是整个正则表达式对象呢?例如encodeURIComponent(regexp.source);
答案 1 :(得分:1)
附加SDK不会在您发送消息时传递对象,只传递字符串 - 它实际上在一侧调用JSON.stringify(),然后在另一侧调用JSON.parse()。结果很容易预测:
console.log(JSON.stringify(new RegExp()));
这会给你"{}"
。换句话说,JSON.stringify()
将“自定义”对象视为普通对象而没有任何属性,对象原型等被忽略。您在主代码中获得的是一个普通对象,就像您调用new Object()
一样。
如果您需要将正则表达式传递给主代码 - 发送regexp.source
,请在另一侧创建一个实际的正则表达式。无法发送实际物体。