0

我遇到了一个问题,我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]'; 

我错过了什么吗?

4

2 回答 2

1

如果您只是发送正则表达式模式而不是整个 rexexp 对象呢?例如encodeURIComponent(regexp.source);

于 2012-08-20T11:15:15.197 回答
1

当您发送消息时,附加 SDK 不会传递对象,仅传递字符串 - 它本质上在一侧调用JSON.stringify(),然后在另一侧调用JSON.parse()。结果很容易预测:

console.log(JSON.stringify(new RegExp()));

这给你"{}"。换句话说,JSON.stringify()将“自定义”对象视为没有任何属性的普通对象,对象原型等将被忽略。您在主代码中得到的是一个普通对象,就像您调用new Object().

如果您需要将正则表达式传递给您的主代码 - send regexp.source,请在另一端创建一个实际的正则表达式。发送实际对象是不可能的。

于 2012-08-20T15:08:29.757 回答