![]() |
|
||||||||||
|
|||||
|
Здравствуйте.
При тестировании в Яндекс Браузере обнаружилась очень неприятная новость что ExternalInterface не работает. Флеш атачу swfobject'ом. Подгружаю две свф, одна (прелоадер) показывается пока не загрузиться основная. Основная после загрузки сообщает через ExternalInterface что убрать прелоадер и показать основную флешку. Флешки скрываю показываю изменением размера function resizeFlash(newWidth,newHeight)
{
if(newWidth)
{
$("#swf-game").css("width",newWidth);
}
if(newHeight)
{
$("#swf-game").css("height",newHeight);
}
}
function removePreloader()
{
console.log("removePreloader");
var preloader = document.getElementById("swf-preloader");
preloader.parentNode.removeChild(preloader);
resizeFlash(749, 660);
var bridge = Router("swf-game");
if (bridge)
{
if (cache.user)
{
console.log('Send User Info')
bridge.onUserInfo(cache.user);
}
if (cache.friend)
{
console.log('Send Friends Info')
bridge.onFriendInfo(cache.friend);
}
}
}
__________________
return this... Последний раз редактировалось AlexCooper; 26.03.2013 в 21:28. |
|
|||||
|
Цитата:
Самый простой способ исправить - тестировать через локальный вебсервер
__________________
... |
|
|||||
|
Вы меня не поняли. Localhost тут не причем. Приложение работает под opera, chrome, mozzilla, IE. А вот в Яндекс Браузере не вызывается JS методы из флеша. Покрайней мере это мой пока последний вердикт. Грешил на то что флешка до загрузки свёрнута в 0х0 пикселей, (недавно здесь же говорилось, что некоторые браузеры вообще не атачат такие флешки) развернул на 1х1 да и на весь экран и все равно нет никакой реакции на ExternalInterface.call()
__________________
return this... |
|
|||||
|
Цитата:
Цитата:
В swfobject allowscriptaccess = "always" (sameDomain)?
__________________
... |
|
|||||
this.loaderInfo.addEventListener(Event.COMPLETE, initApplication); private function initApplication(e:Event):void { GlobalData.external.call('removePreloader'); // JS - функция см. первый пост } <script type="text/javascript">
// Load the game swf
var gameSwfUrl = <?php echo $application; ?>;
var preloaderSwfUrl = <?php echo $preloader; ?>;
var flashVars = {
"version": "001.003.049"
};
var requiredFlashVersion = "10.2.0";
// Preloader swf
swfobject.embedSWF(
preloaderSwfUrl, // SWF URL
"swf-preloader", // Replacement element ID
'750', '660', // Dimensions
requiredFlashVersion,
"", // Flash requirement and express install URL
{}, // Flash vars
{
quality : 'high',
pluginspage : 'http://www.macromedia.com/go/getflashplayer',
wmode : 'opaque',
devicefont : 'false',
allowFullScreen : 'true',
allowScriptAccess : 'always',
},
{name:"swf-preloader"} // Embedded object attributes
);
// Game swf
swfobject.embedSWF(
gameSwfUrl,//gameSwfUrl, // SWF URL
"swf-game", // Replacement element ID
'750', '640', // Dimensions
requiredFlashVersion,
"", // Flash requirement and express install URL
flashVars, // Flash vars
{
quality : 'high',
pluginspage : 'http://www.macromedia.com/go/getflashplayer',
wmode : 'opaque',
devicefont : 'false',
allowFullScreen : 'true',
allowScriptAccess : 'always',
},
{name:"swf-game"} // Embedded object attributes
);
resizeFlash(1,1); // JS - функция, см. первый пост
</script>
<div id="centered">
<div id="gameContainer">
<!-- Game swf -->
<div id="swf-game"></div>
<div id="swf-preloader">
<!-- Alternative content for people who don't have an up-to-date Flash install-->
<div id="noFlashDiv">
<img alt="You need an updated Adobe Flash Player to play MindBattle!" src="/static/facebook/canvas/error_flash.jpg" width="400" height="316" />
<p>Click here to get the latest version of Adobe Flash Player</p>
<a href="//get.adobe.com/flashplayer/" title="Get Flash Player!" id="getFlashBtn" target="_blank">
<img alt="Update!" src="/static/facebook/canvas/error_flashButton.jpg" />
</a>
</div>
</div>
</div>
</div>
<style type="text/css">
#centered
{
margin:auto;
width: 750px;
padding-top: 20px;
cursor:default;
}
#swf-game
{
width:0;
height:0;
margin:0px;
padding:0px;
z-index: 3;
}
На сервере
__________________
return this... |
|
|||||
|
У меня работает. Правда, я на маке, это не самый частый случай, но все же не думаю что работа Yandex.браузера сильно отличается на разных OS. Вставляется так же swfObject'ом, вызывается так же ExternalInterface.call(). Никаких финтов ушами не делается. Единственное что - мы после вызова ExternalInterface флешку сдвигаем в невидимую область (то есть не размер меняем, а просто убираем ее далеко-далеко наверх или там влево).
В общем - работает там ExternalInterface, делайте тестовое приложение, ищите ошибку на своей стороне.
__________________
...вселенская грусть |
|
|||||
|
Обнаружил что в Яндекс.Браузере не срабатывает обработчик
this.loaderInfo.addEventListener(Event.COMPLETE, initApplication); private function initApplication(e:Event):void { GlobalData.external.call('removePreloader'); // JS - функция см. первый пост } Добавлено через 1 минуту подписуюсь в конструкторе. Добавлено через 32 минуты все. Нашел проблему. Каменем преткновением оказался css стиль с настройками 0 width 0 height
__________________
return this... Последний раз редактировалось AlexCooper; 27.03.2013 в 00:55. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|