2015-07-04 7 views
0

Итак, я избегаю публикации этого вопроса из-за сдвига количества предыдущих сообщений. Я пробовал несколько вариантов следующего кода, но безрезультатно.Почему ExternalInterface не вызывает javascript - Flash CC и AS3

Я использую FireFox (последний), Flash Player (последний), AS3 и пару строк JavaScript.

Вот мой AS3:

import flash.external.*; 

// Handling Count For External Refreshing 

var count: Number = 0; 
var countMax: Number = 3; 

function countHandler(): void { 
    if (count >= countMax) { 
     trace("The count has reached the max " + countMax); 
     ExternalInterface.call("refresh"); 
     count = 0; 
    } else { 
     trace("The Count is " + count) 
     return; 
    } 
} 

Я проследил счет, общее, все, что, так что я знаю, что код работает. Он даже сбрасывает count, когда он попадает в 3

Вот JavaScript:

<script language="JavaScript"> 
    function refresh() { 
     window.location.reload(); 
    } 
</script> 

Для хихикает/тестирования, я добавил кнопку на страницу, чтобы проверить, что приведенный выше код работает ...

<input type="button" value="Reload Page" onClick="refresh()"> 

Когда я нажимаю кнопку, она обновляет страницу.

Есть ли что-то, что мне не хватает? Почему рабочая AS3 не обновляет страницу, запуская рабочий javascript?

Когда я нажимаю кнопку, он обновляется, когда код запускается через ActionScript, я не могу нажать любую из SWF-кнопок. Так что он стреляет, но на самом деле не освежает всю страницу.

Update July4th - Обновлен AS3 и Java - Еще нет Luck

+0

Но в коде ActionScript вы вызываете функцию 'refresh' js, которая на самом деле не существовала (по крайней мере, в вашем опубликованном коде)! Таким образом, ваш первый код должен быть: 'ExternalInterface.call (« перезагрузить »);', попробуйте это и сообщите нам, что вы получаете. – akmozo

+0

@akmozo Я обновлю код, который у меня есть прямо сейчас. Я попробовал то, что вы сказали, и это не сработало. Кнопка также использует тот же метод 'refresh()'. One Sec ... – elCavador

+0

Во-первых, вы должны знать, что Java и JavaScript - это два разных языка! По вашему вопросу, я не знаю, в чем ваша проблема, может быть, у вас есть ошибка безопасности, попробуйте проверить, используя версию отладки Flash Player, которую вы можете получить здесь: https://www.adobe.com/support/ flashplayer/downloads.html ... – akmozo

ответ

1

Благодаря Akmozo за помощь.

allowScriptAccess до always - NOT * Как говорится в учебнике adobe (bastards). SWF не может иметь никаких дефис или дефис. Я должен был установить имя файла My.Test.File.fla поэтому, когда я экспорта/построить выводит следующее flashContent

<div id="flashContent"> 
    <object type="application/x-shockwave-flash" data="My.Test.File.swf" width="1920" height="1080" id="My.Test.File" style="float: none; vertical-align:middle"> 
     <param name="movie" value="My.Test.File.swf" /> 
     ... 
     <param name="allowScriptAccess" value="always" /> 
     ... 
    </object> 
</div> 

Больше информации о символах в номенклатуре - Here

Вот является ActionScript я.

// Handling Count For External Refreshing 
var count: Number = 0; //start count at 0 
var countMax: Number = 3; //max whatever you need it to be 
var isAvailable: Boolean = ExternalInterface.available; // checking if avail 

trace(isAvailable); 

function countHandler(): void { 
    if (count >= countMax) { 
     trace("The count has reached the max " + countMax); // Trace in flash 
     ExternalInterface.call("console.log", "testing..."); // Output to Console 
     ExternalInterface.call("refresh"); //fire the refresh script 
     count = 0; // reset the count 
    } else { 
     trace("The Count is " + count) 
     return; 
    } 
} 

Вот сценарий java. Размещенные в <head> ниже <style>

<script language="JavaScript"> 
     function refresh() { 
      console.log("Try To Refresh"); 
      window.location.reload(); 
     } 
    </script> 

мне пришлось создать crossdomain.xml файл, чтобы разрешить доступ. Я тестировал проект несколько раз с crossdomain.xml и без него, я получаю ошибку security sandbox. Не знаю, почему allowScriptAccess="always" не работает.

Заключение Так кажется, что установка allowScriptAccess для * это плохая идея. Я получил это из одного из учебных пособий Adobe Sandbox (спасибо Adobe). Кроме того, прохождение "refresh();" по ExternalInterface.call ищет refresh аргументов, которых нет.Имя файла SWf но не используйте дефис - как это ..

Этот ... MyFileName.swf

Не это ... My-File-Name.swf

Этот код выполняется, как ожидалось. Спасибо всем за ваш вклад и помощь.

 Смежные вопросы

  • Нет связанных вопросов^_^