Я думаю, что самое простое, что нужно сделать, - это включить на страницу HTML какую-нибудь библиотеку JavaScript, скажем, jQuery, и использовать ее функции для определения положения и размера узлов DOM. Я бы сделал это более или менее так:
var jsCode : String = "function( id ) { return $('#' + id).offset(); }";
var offset : Object = ExternalInterface.call(jsCode, ExternalObject.objectID);
trace(offset.left, offset.top);
Обратите внимание, что это код ActionScript, но он запускает код JavaScript через ExternalInterface
. Он использует jQuery и, в частности, его метод offset
, который возвращает левое и верхнее смещение узла DOM.
Вы могли бы обойтись без jQuery, если бы посмотрели, как реализован метод offset
, и включили этот код вместо вызова jQuery. Таким образом, вам не нужно загружать jQuery в HTML, и приложение Flex будет автономным. Причина, по которой я предлагаю использовать такую библиотеку, как jQuery, заключается в том, что браузеры делают это по-разному. Я не уверен, что вычисление смещений сильно отличается от браузера к браузеру, но не мешает быть изолированным от различий браузера.
JavaScript в моем примере является анонимной функцией, так что идентификатор тега embed / object может быть передан ему в качестве параметра ExternalInterface.call
, но вы можете просто использовать конкатенацию строк, если хотите:
var jsCode : String = "$('#' +" + ExternalInterface.objectID + ").offset()";
var offset : Object = ExternalInterface.call(jsCode);
Это бы тоже сработало, я просто думаю, что первая версия более элегантна.