发现HTML对象标记方法/属性

Discover HTML Object tags methods/properties

本文关键字:方法 属性 HTML 对象 发现      更新时间:2023-09-26

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.getOwnPropertyNamesObject.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没有办法要求这个列表,除非插件专门实现了某种功能来启用这种功能。