Вы можете обнаружить XPCWrappedNative, потому что x instanceof Components.interfaces.nsISupports
возвращает true. Однако это также возвращает true для узлов DOM, документов, окон и т. Д. Если это не то, что вам нужно, последующий x.QueryInterface(Components.interfaces.nsIClassInfo)
должен быть успешным для большинства объектов DOM.
Вы не можете обнаружить XPCWrappedJS, если базовый объект JS не предоставляет свойство wrappedJSObject. (На самом деле вы не видите сам объект XPCWrappedJS, поскольку это объект C ++, но этот объект затем может быть передан обратно в JS как XPCWrappedNative.)
Вы можете обнаружить XPCNativeWrapper, используя x == XPCNativeWrapper(x)
. Конечно, базовый объект сам по себе будет XPCWrappedNative.
Вы действительно не можете обнаружить XPCSafeJSObjectWrapper, вы просто должны знать, что если вы развернете XPCNativeWrapper для объекта содержимого, вы получите XPCSafeJSObjectWrapper.