Что я имею:
Пример экспорта функций в swf:
flash.external.ExternalInterface.addCallback("isActive", ...
Пример создания встроить объекта:
var b = document.createElement('embed');
b.type = 'application\u002fx-shockwave-flash';
b.setAttribute('allowFullScreen', 'true');
b.setAttribute('allowNetworking', 'all');
b.setAttribute('allowScriptAccess', 'always');
b.width = 500;
b.height = 400;
b.src = 'assets\u002fUltra4.UltraApplication\u002fUltra4.UltraApplication+UltraSprite.swf';
Пример вызова флэш-памяти внешний интерфейс в JavaScript:
try
{
e = b.isActive();
}
catch (__exc){ }
В IE это поймает с сообщением "Объект, не поддерживает это свойство или метод"
Как зафиксировать его?
В отладчике сценариев I видят сторонний сценарий, который, как предполагается, является мостом:
function __flash__arrayToXML(obj) {
var s = "";
for (var i=0; i" + __flash__toXML(obj[i]) + "";
}
return s+" ";
}
function __flash__argumentsToXML(obj,index) {
var s = "";
for (var i=index; i";
}
function __flash__objectToXML(obj) {
var s = "";
}
function __flash__escapeXML(s) {
return s.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'");
}
function __flash__toXML(value) {
var type = typeof(value);
if (type == "string") {
return "" + __flash__escapeXML(value) + " ";
} else if (type == "undefined") {
return " ";
} else if (type == "number") {
return "" + value + " ";
} else if (value == null) {
return " ";
} else if (type == "boolean") {
return value ? " " : " ";
} else if (value instanceof Date) {
return "" + value.getTime() + " ";
} else if (value instanceof Array) {
return __flash__arrayToXML(value);
} else if (type == "object") {
return __flash__objectToXML(value);
} else {
return " "; //???
}
}
function __flash__addCallback(instance, name) {
instance[name] = function () {
return eval(instance.CallFunction("" + __flash__argumentsToXML(arguments,0) + " "));
}
}
function __flash__removeCallback(instance, name) {
instance[name] = null;
}
Я не знаю, почему кто-то делает * ,/,% операций, в то время как простые побитовые операции могут делать такие вещи.
-121--4244596-a = (c & 0x0F) < < 4;
b = (c & 0xF0) > > 4;
c = a 'b;
Глобальная переменная решит мою задачу на данный момент и только с одной ссылкой на $ global: arg _ environent будет легко изменить, если я найду лучший способ ввести свойства.
build.ps1
param(
[Parameter(Position=0,Mandatory=0)]
[string]$task,
[Parameter(Position=1,Mandatory=0)]
[string]$environment = 'dev'
)
clear
$global:arg_environent = $environment
Import-Module .\psake.psm1
Invoke-psake tasks.ps1 $task
Remove-Module psake
tasks.ps1
properties {
$environment = $global:arg_environent
}
task default -depends Deploy
task Deploy {
echo "Copy stuff to $environment"
}
-121--1906121- Я не уверен, что правильно понимаю ваш вопрос. Но я думаю, что вы упускаете пару вещей:
1) Ваша встраиваемый тэг нуждается в атрибуте имени. Назовем его «NewStartMovie» для последующего кода:
b.name = "NewFlashMovie";
2) Функцию «isActive» нужно вызывать по-другому с помощью внешней функции. Сначала добавьте эту функцию
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
Затем вы можете вызвать функцию, как это
thisMovie («NewStartMovie») .isActive ();
Из моего опыта, этот «thisMovie» необходим для моста вызовов IE-Flash. Это также описано в документации ExternalInterface
3) Вместо создания собственного объекта «встраивания» рекомендуется использовать swfobject .
Надеюсь, это поможет.
Может ли это быть связано с тем, что вы создаете тег Embed вместо тега Object? IE традиционно использует теги объектов для встраивания Flash-содержимого
См. Технологию Adobe не для обсуждения: http://kb2.adobe.com/cps/415/tn_4150.html
Я обнаружил, что для IE, вызывая Javascript из ActionScript, мне нужно было указать атрибут id для объекта тег. Способ IE для обработки ExternalInterface.call (...) заключается в вызове метода объекта . IE выдает код
document.getElementById("...").SetReturnValue(...)
Без атрибута id в теге вашего объекта это сокращается до
document.getElementById("").SetReturnValue(...)
, который пытается вызвать SetReturnValue для нулевого объекта.
Обратите внимание, что атрибут «id» не требуется для других браузеров, но это тоже не повредит.
Нечто подобное может происходить и в вашем случае: возможно, может помочь атрибут «name» на embed .