Откройте для себя теги объектов HTML методы / свойства
API Garmin Communicator работает через плагин для браузера, который доступен для JS из <object>
тег встроен в тело HTML.
Я пытаюсь найти недокументированные методы / свойства этого объекта при сборке GWT-Garmin-API. Работая с их исходным кодом JS API, я вижу официальные методы, но я хочу найти любые другие методы / реквизиты. Пока я не могу найти способ перечислить их по ссылке на элемент Object на странице.
Никакой отладчик, который я использую, не показывает никаких подобных реквизитов Я надеялся, что там может быть какое-то отражение объекта, кунг-фу, о котором я не знаю. Благодарю.
Обновить:
Пример можно найти на примере устройства Garmin Hello.
В консоли выполните итерацию по объекту, который вы найдете из следующего:
var plugin = document.getElementsByTagName('object')[0];
for(var prop in plugin) {
console.log( prop );
}
Однако это не найдет методы плагина, такие как plugin.Unlock(), которые вы можете легко вызвать из одной и той же строки консоли.
2 ответа
Никакой отладчик, который я использую, не показывает такие реквизиты
Тогда нет такой вещи, если предположить, что эти хост-объекты не реализованы как прокси.
Ваш подход перечисления свойств с помощью цикла (и даже более тяжелого оружия, такого как Object.getOwnPropertyNames
а также Object.getPrototypeOf
) имеет недостатки, так как все видимое, как это будет показано в вашем отладчике.
Если вы действительно хотите найти "скрытые" свойства (я уверен, что их нет), вам необходимо выполнить грубую проверку всех возможных имен свойств. Или посмотрите на их источник, который может быть скрыт от вас, если это хост-объект.
В общем, если у вас есть ссылка на 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 нет возможности запросить этот список, если плагин специально не реализовал что-то, чтобы включить такую функциональность.