ExternalInterface - PullRequest
       23

ExternalInterface

0 голосов
/ 29 апреля 2010

Эй, у меня куча проблем с тем, чтобы заставить ExternalInterface работать, что странно, потому что я использую его довольно часто.

Надеюсь, я что-то упустил, потому что слишком долго на это смотрел.

Функция flash_ready правильно возвращает objectID, и, насколько я могу судить, все остальное в порядке.

К сожалению, когда я запускаю его, я получаю сообщение об ошибке (зависит от браузера), сообщающее, что в основном document.getElementById (<movename>). Test () не является допустимым методом.

Вот код:

JavaScript:

function flash_ready(i){
    document.getElementById(i).test('success!'); 
}

Вставить HTML (Создано):

<script type="text/javascript">
    swfobject.embedSWF("/chainmaille/includes/media/flash/upload_image.swf", "/chainmaille/includes/media/flash/upload_image", "500", "50", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always', wmode:'transparent'},{id:'uploader_flash',name:'uploader_flash'});
</script>
<object type="application/x-shockwave-flash" id="uploader_flash" name="uploader_flash" data="/chainmaille/includes/media/flash/upload_image.swf" width="500" height="50"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>

AS3:

package com.jesseditson.uploader {

  import flash.display.MovieClip;
  import flash.external.ExternalInterface;
  import flash.system.Security;

    public class UI extends MovieClip {

     // Initialization:
     public function UI() {
        Security.allowDomain('*');
        ExternalInterface.addCallback("test", test);

        var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
        var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
        navigateToURL(url, "_self");
    }

    public function test(t){
      trace(t);
    }
  }
}

Swfobject включается через код Google, и флеш-память встраивается просто отлично, так что это не проблема.

У меня очень похожая настройка, работающая на другом сервере, но не могу заставить ее работать на этом. Это общий сервер Hostgator. Может ли это быть ошибка сервера? Кто-нибудь видит какие-либо очевидные проблемы с синтаксисом?

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 27 октября 2011

Просто потратил 5 часов на борьбу с этим. Все это было действительно расстраивающим. В моем случае решение было очень очень простым, и я бы никогда не догадался об этом. Итак, прежде всего для всех вас, кто никогда не видел, чтобы отладчик флеш-плеера работал с файлами внутри вашего браузера, обнаружив , эта ссылка, которая проведет вас через настройку , привела к несколько волшебному опыту :) Теперь к моему открытию ExternalInterface: в том же домене было нарушение песочницы. Это означало, что flash не может получить доступ к www.yourdomain.com с yourdomain.com. Конечно, странно то, что вы явно не вызываете домен с ExternalInterface. В любом случае, решение было очень простым: добавьте это в мой файл .htaccess, и все!

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.youtdomain.com/$1 [R=301,L] 

Надеюсь, это кому-нибудь поможет

1 голос
/ 16 июня 2010

Хорошо, поэтому после дальнейшего исследования выяснилось, что была проблема с несколькими экземплярами объекта flash, потому что я клонировал его в лайтбокс. Я получил это работает сейчас.

1 голос
/ 30 апреля 2010

На самом деле Flash еще не закончен. Вы вызываете свой обратный вызов flash_ready из конструктора, и JS пытается вызвать его до того, как объект окажется на сцене. Переместите flash_ready вызов, скажем, к Event.ADDED_TO_STAGE слушателю, и он должен начать работать.

0 голосов
/ 30 апреля 2010

Опубликовать ваш источник (предварительно сгенерированный). Когда ваш браузер сообщает [Flash]. Метод не является функцией, 99% времени это означает, что вы пытались вызвать функцию во Flash до того, как .swf был к ней готов. Я вижу, что вы пытались это сделать, но очевидно, что это не работает, поэтому что-то должно быть выключено. Так что опубликуйте свой предварительно отрендеренный источник, и я уверен, что мы сможем найти проблему.

0 голосов
/ 29 апреля 2010

Флэш-память уже получает ожидаемый идентификатор объекта?

Кроме того, зачем использовать:

var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
navigateToURL(url, "_self");

Когда это предназначено для этого:

ExternalInterface.call("flash_ready", ExternalInterface.objectID);
...