Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 你能检查一个对象是否被XPConnect(Firefox)包装吗?_Javascript_Firefox_Xpcom - Fatal编程技术网

Javascript 你能检查一个对象是否被XPConnect(Firefox)包装吗?

Javascript 你能检查一个对象是否被XPConnect(Firefox)包装吗?,javascript,firefox,xpcom,Javascript,Firefox,Xpcom,我的设想: 我在窗口对象上迭代,试图只检索用户定义的变量/函数,并过滤掉本机浏览器对象 for(var i in window) { // Right now I just have a bunch of if checks on window[i] } 我注意到本机浏览器对象/XPCOM组件是通过XPConnect包装的,XPConnect返回一个对象包装器,允许它与Javascript接口。我在想,如果我能以某种方式检查这个对象是否是一个包装器,那么我就可以过滤掉它。 有没有办法检

我的设想: 我在窗口对象上迭代,试图只检索用户定义的变量/函数,并过滤掉本机浏览器对象

for(var i in window) {
    // Right now I just have a bunch of if checks on window[i]
}
我注意到本机浏览器对象/XPCOM组件是通过XPConnect包装的,XPConnect返回一个对象包装器,允许它与Javascript接口。我在想,如果我能以某种方式检查这个对象是否是一个包装器,那么我就可以过滤掉它。 有没有办法检查对象是否通过XPConnect包装?我想筛选出作为此处列出的任何包装类型包装的所有对象:
您可以检测XPCWrappedNative,因为
x instanceof Components.interfaces.nsistups
返回true。但是,对于DOM节点、文档、窗口等,这也会返回true。如果这不是您想要的,那么对于大多数DOM对象,后续的
x.QueryInterface(Components.interfaces.nsiclasinfo)
应该会成功

除非底层JS对象公开wrappedJSObject属性,否则无法检测XPCWrappedJS。(实际上,你并不知道XPCWRADDJS对象本身,因为这是C++对象,但是该对象然后可以作为一个XPCWRADEDATA原生传递回JS)

您可以使用
x==XPCNativeWrapper(x)
检测XPCNativeWrapper。当然,底层对象本身将是XPCWrappedNative


您无法真正检测到XPCSafeJSObjectWrapper,您只需要知道,如果您为内容对象打开XPCNativeWrapper,那么您将得到一个XPCSafeJSObjectWrapper。

为什么不检查是否存在名为
wrappedJSObject
的属性,该属性会暴露哪些被包装的对象?如果它像鸭子一样嘎嘎叫