Убедитесь, что объект javascript существует, прежде чем вызывать его из Flash - PullRequest
2 голосов
/ 10 февраля 2012

Я разрабатываю флэш-приложение для сайта, к которому у меня нет прямого доступа. Предполагается, что приложение Flash вызывает на веб-сайте функцию javascript, определенную издателем веб-сайта. Мне посоветовали проверить наличие объекта javascript перед вызовом его функции из actionscript:

var ok:Boolean = ExternalInterface.call(function() { 
    return typeof customObject !== \'undefined\' 
}

Если я продолжу:

if (ExternalInterface.available && ok) {
    ExternalInterface.call('customObject.doSomething', someStr);
}

Будет ли это, если условие всегда будет ложным, потому что вызов, который сохраняется в ok, возможно, не завершился до того, как я использую проверку, или это ExternalInterface.call мгновенно? Другими словами, должен ли я как-то подождать результата первого вызова, прежде чем определить, могу ли я с уверенностью предположить существование customObject.

Редактировать: Обновлен код, предложенный в комментариях:

if (ExternalInterface.available) {
  var ok:Boolean = ExternalInterface.call('function() { return typeof customObject !== \'undefined\' }');
  if (ok) {
    ExternalInterface.call('customObject.doSomething', someStr);
  } else {
    .. do some fallback
  }
} else {
  .. do some fallback
}

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Для надежности вам нужно проверить, есть ли здесь функция:

var ok:Boolean = ExternalInterface.call(function() {
    if (typeof(customObject) === 'object' && typeof(customObject.doSomething) === 'function') {
        return true;
    }
}

ExternalInterface.call является синхронным, поэтому вы должны обнаружить, что он будет ждать, пока этот бит не будет завершен, до перехода к следующему.

1 голос
/ 10 февраля 2012

Метод ExternalInterface.call будет доступен, как только будет загружен SWF-файл (тогда как ваш файл JavaScript или переменная могут отсутствовать в данный момент).Итак, вы хотите использовать метод ExternalInterface.addCallback, чтобы связать вашу функцию в ActionScript с другой в вашем коде JavaScript.

Вот документация по этой функции .

...