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

Add-on SDK は、メッセージを送信するときにオブジェクトを渡さず、文字列のみを渡します。基本的に、一方ではJSON.stringify()を呼び出し、次に他方ではJSON.parse()を呼び出します。結果は簡単に予測できます。

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

これにより、 が得られます"{}"。つまり、JSON.stringify()「カスタム」オブジェクトをプロパティのない通常のオブジェクトとして扱い、オブジェクト プロトタイプなどは無視されます。メイン コードで得られるのは、 を呼び出した場合と同じプレーンなオブジェクトですnew Object()

メインコード send に正規表現を渡す必要がある場合はregexp.source、反対側で実際の正規表現を作成します。実際のオブジェクトを送信することはできません。

于 2012-08-20T15:08:29.757 に答える