Garmin Communicator API通过浏览器插件进行操作,该插件通过嵌入在HTML正文中的<object>
标记向JS公开。
我正在尝试在构建GWT-Garmin-API时找到此对象的任何未记录的方法/属性。使用他们的JS API source我可以看到官方方法,但我想找到任何其他方法/道具。到目前为止,我找不到从页面中的Object元素的引用列出这些的方法。
我使用的调试器没有显示任何此类道具。我希望可能会有一些我不知道的对象反射功夫。感谢。
更新
示例可以在Garmin Hello Device example找到。
从控制台迭代您将从以下内容中找到的对象:
var plugin = document.getElementsByTagName('object')[0];
for(var prop in plugin) {
console.log( prop );
}
然而,这将无法找到插件方法,如plugin.Unlock(),您可以从同一控制台线轻松调用。
答案 0 :(得分:2)
我使用的调试器没有显示任何此类道具
然后没有这样的事情,假设这些宿主对象没有实现为Proxies。
使用for-in-loop(甚至更重的武器,例如Object.getOwnPropertyNames
和Object.getPrototypeOf
)枚举属性的方法存在缺陷,因为任何可见的内容都会显示在调试器中。< / p>
如果你真的想找到“隐藏”属性(我很确定没有),你需要暴力测试所有可能的属性名称。或者查看一下它们的来源,如果它是一个宿主对象,可能会对你隐藏。
答案 1 :(得分:0)
通常,如果您在javascript中引用了object
,则可以使用以下方法遍历该对象的属性和方法:
for(var property in object) {
var value = object[property];
console.log(property + ' = ' + value);
}
鉴于您链接的源代码,您还可以尝试迭代某些Garmin类的原型,例如:
for(var property in Garmin.DevicePlugin.prototype) {
//...
}
如果在以其中一种方式迭代时没有显示,则表示该属性未向javascript公开。未显示的“可调用”方法(如plugin.unlock()
)在插件本身中定义。 (当您调用这样的方法时,您可以将其视为将消息从javascript直接传递到插件的实现中。)我知道找到这些方法的“列表”的唯一方法是访问源代码您正在使用的插件的代码。 javascript无法要求此列表,除非该插件已专门实现某些功能以启用此类功能。