Flash & IE: «Объект не поддерживает это свойство или метод» ошибка (с использованием ExternalInterface) - PullRequest
1 голос
/ 01 марта 2011

В моем файле Actionscript у меня есть:

ExternalInterface.addCallback("loadHotspotsXMLCallback", hotspotsXMLCallback);

В HTML у меня есть:

<embed width="100%" height="100%" align="middle" type="application/x-shockwave-flash" salign="" allowscriptaccess="sameDomain" allowfullscreen="false" menu="false" name="FloorplanViewer" bgcolor="#FFFFFF" id="FloorplanViewer" devicefont="false" wmode="transparent" scale="showall" loop="false" play="true" pluginspage="http://www.adobe.com/go/getflashplayer" quality="high" flashvars="..." src="swf/FloorplanViewer_V110228b.swf">

В JS у меня есть:

$("FloorplanViewer")["loadHotspotsXMLCallback"](response.responseText);

И я тоже попробовал:

window["loadHotspotsXMLCallback"](response.responseText)

и

document["loadHotspotsXMLCallback"](response.responseText)

Но JS часть DNW в IE, и это делает в FF и GC. Кто-нибудь знает почему?

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

  • убедившись, что добавленное внешнее имя обратного вызова не совпадает с внутренним именем обратного вызова для кода ActionScript выше.
  • задержка кода, добавляющего обратный вызов, на 500 мс

Но эти изменения не имели никакого эффекта.

Ответы [ 3 ]

3 голосов
/ 01 марта 2011

Я предлагаю попробовать это как можно проще из моей статьи, http://work.arounds.org/issue/10/calling-flash-functions-from-javascript/

<object id="flash" data="file.swf" width="420" height="300"></object>
<script>
      onload = function() {
          var flash = document.getElementById('flash');
          flash.NextFrame();
      }
</script>

Сначала попробуйте преобразовать embed в object, затем просто получить элемент по идентификатору после загрузки окна. Также попробуйте alert( 'functionName' in flash );, чтобы убедиться, что метод существует.

1 голос
/ 01 марта 2011

Я бы попробовал что-то вроде этого:

var fpViewer = document["FloorplanViewer'] || window["FloorplanViewer"];
fpViewer.loadHotspotsXMLCallback(response.responseText);

Кроме того, я теряю представление о том, как лучше всего вставлять Flash на страницы в наши дни.Но я бы определенно обернул этот элемент embed элементом object, чтобы обеспечить максимальную кросс-браузерную совместимость.

Rich

0 голосов
/ 02 марта 2011

Мне было очень трудно решать подобные проблемы с IE 6, 7, 8 и т. Д.

Некоторые вещи, которые помогли, в порядке приоритета:

  1. задержка кода, вызывающего обратный вызов

  2. Если вы используете более 1 SWF-файла, постарайтесь не прикреплять все SWF-файлы, одновременно добавляющие обратные вызовы / etcs

Два или более одновременных вызова javascript (addCallbacks / ExternalInterface.call / etcs) обычно приводят к некоторой ошибке IE.

Если вам нужно выполнить много вызовов javascript, возможно, стоит реализовать «стек вызовов Javascript», который будет вызывать каждую операцию после другой с небольшой задержкой.

очень надеюсь, что это поможет

У меня были действительно плохие времена, когда я боролся с IE / кросс-браузерной совместимостью с более чем 1 swf-файлом на одной странице, нуждающимся в управлении с / на javascript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...