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

时间:2013-02-02 03:24:08

标签: javascript html gwt object garmin

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(),您可以从同一控制台线轻松调用。

2 个答案:

答案 0 :(得分:2)

  

我使用的调试器没有显示任何此类道具

然后没有这样的事情,假设这些宿主对象没有实现为Proxies

使用for-in-loop(甚至更重的武器,例如Object.getOwnPropertyNamesObject.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无法要求此列表,除非该插件已专门实现某些功能以启用此类功能。