3

Garmin Communicator API<object>、HTML 本文に埋め込まれたタグから JS に公開されるブラウザ プラグインを介して動作します。

GWT-Garmin-APIを構築するときに、このオブジェクトの文書化されていないメソッド/プロパティを見つけようとしています。彼らのJS API ソースを操作すると、公式のメソッドが表示されますが、他のメソッド/小道具を見つけたいです。これまでのところ、ページ内の Object 要素への参照からこれらを一覧表示する方法が見つかりません。

私が使用するデバッガーは、そのような小道具を表示しません。私が知らないオブジェクト反射カンフーがあるかもしれないと思っていました。ありがとう。

アップデート:

例はGarmin Hello Device exampleにあります。

コンソールから、次のオブジェクトを反復処理します。

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

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

ただし、同じコンソール ラインから簡単に呼び出すことができる plugin.Unlock() などのプラグイン メソッドは検出されません。

4

2 に答える 2

2

私が使用するデバッガーは、そのような小道具を表示しません

これらのホスト オブジェクトがProxiesとして実装されていないと仮定すると、そのようなことはありません。

Object.getOwnPropertyNamesfor-in-loop (およびandなどのより重い武器) を使用してプロパティを列挙するアプローチにObject.getPrototypeOfは欠陥があります。そのように見えるものはすべてデバッガーに表示されます。

「隠された」プロパティを本当に見つけたい場合 (何もないと確信しています)、考えられるすべてのプロパティ名をブルート フォース テストする必要があります。または、ホスト オブジェクトの場合、ソースが隠されている可能性があるため、そのソースを調べてください。

于 2013-02-04T02:55:32.440 に答える
0

一般に、objectjavascript で への参照がある場合、次を使用してそのオブジェクトのプロパティとメソッドをループできます。

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 に答える