3

Garmin Communicator API通过浏览器插件运行,该插件通过嵌入在 HTML 正文中的标签向 JS公开<object>

在构建GWT-Garmin-API时,我试图找到该对象的任何未记录的方法/属性。使用他们的JS API 源,我可以看到官方方法,但我想找到任何其他方法/道具。到目前为止,我找不到从页面中对 Object 元素的引用列出这些的方法。

我使用的任何调试器都没有显示任何此类道具。我希望可能有一些我不知道的对象反射功夫。谢谢。

更新:

示例可以在Garmin Hello Device 示例中找到。

在控制台中,遍历您将从以下内容中找到的对象:

var plugin = document.getElementsByTagName('object')[0];

for(var prop in plugin) {
    console.log( prop );
}

但是,这不会找到像 plugin.Unlock() 这样的插件方法,您可以轻松地从同一控制台行调用它们。

4

2 回答 2

2

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

那么就没有这样的事情了,假设那些主机对象没有被实现为Proxies

Your approach of enumerating properties with a for-in-loop (and even heavier weapons such as Object.getOwnPropertyNames and Object.getPrototypeOf) is flawed, as anything visible like that would be shown in your debugger.

If you really want to find "hidden" properties (I'm very sure there are none), you would need to brute-force test all possible property names. Or have a look into their source, which might be hidden from you if it's a host object.

于 2013-02-04T02:55:32.440 回答
0

一般来说,如果您object在 javascript 中有一个引用,您可以使用以下方法循环该对象的属性和方法:

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

于 2013-02-03T22:35:37.730 回答