发现HTML对象标记方法/属性
Discover HTML Object tags methods/properties
Garmin Communicator API通过浏览器插件运行,该插件通过嵌入在HTML主体中的<object>
标签暴露给JS。
在构建GWT-Garmin-API的过程中,我试图找到该对象的任何未记录的方法/属性。使用他们的JS API源代码,我可以看到官方方法,但我想找到任何其他方法/道具。到目前为止,我还找不到从对页面中Object元素的引用中列出这些元素的方法。
我使用的调试器都没有显示任何这样的道具。我希望有一些我不知道的物体反射功夫。谢谢
更新:
示例可以在Garmin Hello设备示例中找到。
在控制台中,遍历您将从以下内容中找到的对象:
var plugin = document.getElementsByTagName('object')[0];
for(var prop in plugin) {
console.log( prop );
}
然而,这将找不到像plugin这样的插件方法。Unlock(),您可以从同一控制台行轻松调用它。
我使用的调试器没有显示任何这样的道具
那么就没有这样的东西了,假设这些主机对象没有实现为代理。
您使用for在循环中枚举属性的方法(甚至更重的武器,如Object.getOwnPropertyNames
和Object.getPrototypeOf
)是有缺陷的,因为任何类似的可见内容都会在调试器中显示。
如果你真的想找到"隐藏"的属性(我确信没有),你需要对所有可能的属性名称进行强力测试。或者看看它们的来源,如果是宿主对象,它可能会对你隐藏。
通常,如果您在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没有办法要求这个列表,除非插件专门实现了某种功能来启用这种功能。
- 序列化数据属性中对象的最可靠方法
- 如何从对象的原型方法访问JavaScript对象属性
- 设置嵌套对象属性的更好方法
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- 对象不支持属性或方法“自动完成”
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 区分具有相同名称的属性和方法
- sails.js beforeCreate方法只接收required设置为true的模型属性
- SCRIPT438:对象没有't支持属性或方法'endsWith'在IE10中
- 有什么方法可以将类型指定为 self?或解决方法“属性类型不兼容”
- 打字稿 - 为什么猫鼬中不存在“方法”属性
- 从JavaScript中的另一个方法属性中引用对象方法属性
- Javascript:通过在数组上循环来创建对象方法/属性
- 冲突/方法/属性Javascript错误
- 将' this '的继承扩展到' object '的方法/属性
- Javascript继承静态和实例方法/属性
- 我可以为对象设置正则表达式吗's方法/属性选择器
- 发现HTML对象标记方法/属性
- 为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?