У меня есть SWF-файл «виртуальной карты» с разными местоположениями. Когда каждое местоположение кликается, пользователь перенаправляется на гиперссылку.Как я могу отправить пользователя на другой URL-адрес, используя navigateToURL, в зависимости от выбранной цели?
Как я могу перенаправить каждое местоположение на другую гиперссылку?
- Если фонтан была нажата, пользователь будет перенаправлен на http://different.com
- Если замок щелкнул, пользователь будет перенаправлен на http://something.com
Вы можете скачать SWF из here или представления он онлайн: http://www.fastswf.com/NInMHKU
Вот код ActionScript, который позволяет пользователю перенаправляться при нажатии на местоположение:
package
{
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.events.MouseEvent;
public class Map
{
public function Map()
{
}
public function gotoLocation(param1:int) : void
{
if(param1 != 999)
{
navigateToURL(new URLRequest("http://www.baidu.com"),"_blank");
}
}
private function closeMap(param1:MouseEvent = null) : void
{
}
}
}
После декомпиляции SWF-файла с программой под названием JPEXS Free Flash Decompiler, я обнаружил, что есть две разные AS-файлов для каждого места на карте. В качестве примера ниже приведены файлы для фонтана.
Источник: Flumsfountain_499.as
package SkylandersSuperchargersMap_26_10_15_fla
{
import flash.display.MovieClip;
public dynamic class Flumsfountain_499 extends MovieClip
{
public function Flumsfountain_499()
{
super();
addFrameScript(0,this.frame1,1,this.frame2);
}
function frame1() : *
{
stop();
}
function frame2() : *
{
stop();
}
}
}
Источник: flumsfountainlPU_520.as
package SkylandersSuperchargersMap_26_10_15_fla
{
import flash.display.MovieClip;
public dynamic class flumsfountainlPU_520 extends MovieClip
{
public function flumsfountainlPU_520()
{
super();
addFrameScript(18,this.frame19);
}
function frame19() : *
{
stop();
}
}
}
Раньше я пытался ...
Я был в состоянии использовать RABCDAsm декомпилировать SWF в множество различных файлов, а вот код (исходный файл:Map.class.asasm
), который производится по проекту AS3 в верхней части этого вопроса:
trait method QName(PackageNamespace(""), "gotoLocation")
method
name "gotoLocation"
refid "TestGotoLocationFunction/instance/gotoLocation"
param QName(PackageNamespace(""), "int")
returns QName(PackageNamespace(""), "void")
flag HAS_PARAM_NAMES
paramname "param1"
body
maxstack 4
localcount 2
initscopedepth 0
maxscopedepth 1
code
getlocal0
pushscope
getlocal1
pushshort 999
ifeq L13
getlex QName(PackageNamespace("flash.net"), "navigateToURL")
getglobalscope
findpropstrict QName(PackageNamespace("flash.net"), "URLRequest")
pushstring "http://www.baidu.com"
constructprop QName(PackageNamespace("flash.net"), "URLRequest"), 1
pushstring "_blank"
call 2
pop
L13:
returnvoid
end ; code
end ; body
end ; method
end ; trait
_Note_: ** (1) ** Убедитесь, что вы проверить, что можно повторно скомпилировать ** рабочий ** новые швейцарские франки от JPEXS декомпилирован код , ** (2) ** Также, что ссылка FastSWF.com дает «модифицированный» SWF (например, base64 или такой?), Поэтому, когда он сохраняется с сайта, он не может быть открыт как допустимый SWF в декомпиляторе (байты don даже начинать с ожидаемых значений «CWS» или «FWS» байтов). Я заменил ссылку FastSWF на тестовую ссылку из вашего предыдущего Вопроса. Наконец, подтвердите, что вы можете успешно скомпилировать новый SWF. Затем мы будем знать, что вам нужно, и в противном случае отредактировать код '.ASasm' - ваш лучший вариант. –
@ VC.One Привет, причина, по которой есть ссылка на модифицированный SWF, заключается в том, что правильный, который вы редактировали в сообщении, не перенаправляется на тот же URL-адрес при щелчке по местоположению. Можете ли вы порекомендовать мне сайт, на который я могу загрузить измененный SWF, который можно открыть как действительный SWF в декомпиляторе? Я рассмотрю, можно ли скомпилировать SWF. –
Я имею в виду, что сам сайт делает какую-то защиту от копирования с загруженными swf (попробуйте сохранить swf для целей тестирования, только дает зашифрованный файл). Не проблема, если просмотр в режиме онлайн, но ответчик должен будет заново создать вашу проблему, декомпилировав исходный swf. –