PDA

Просмотр полной версии : Перехват ссылки внутри флэша.


winfast
15.02.2008, 15:56
Есть флэшка, в которой есть ссылки.

1. Изначально ссылки были html странице.
Пример html - кода:

<a href="http://yandex.ru">yandex.ru</a>

2. Затем html страница преобразовывалась в PDF (ссылки остаются рабочими)

3. Далее из PDF делался отдельный SWF.

В итоге получаем флэшку, в которой есть возможность переходить по html ссылкам.

Теперь, собственно, вопрос: можно ли как то отлавливать событие, когда кликаем по ссылке?
А потом проверить, если ссылка вида, предположим, <a href="http://some_site_here">, то ничего не делать. А если ссылка имеет вид - <a href="#bookmark=7"> то выполнять какое нибудь действие.

Можно ли это как то реализвать?
(нужно для создания закладок (оглавления) во флэш-книге):rtfm:

iNils
15.02.2008, 19:54
В хелпе прочитайте про asfunction.

winfast
15.02.2008, 21:37
хм, не понял, как можно при помощи этой функции, проверять при клике на ссылку, что если в ней #bookmark=5 то выполнять функию gotoPage(), если нет - ничего не делать (будет происходить авто открытие линка) ,
Как это можно сделать?

iNils
15.02.2008, 21:45
asfunction вызвает назначенную вами функцию и передает туда аргумент. А внутри этой функции вы сами решаете, что делать исходя из аргумента.

winfast
15.02.2008, 21:51
это я вижу, меня интересует другое... могу ли я как то отлавливать сами ссылки в отдельном swf файле, который динамически загружается во флеш - книгу? (ссылки в swf файле)

iNils
15.02.2008, 21:57
Ссылки какого вида?
<a href="http://yandex.ru">yandex.ru</a>
или с asfunction?

Molecula
15.02.2008, 22:08
Похоже у него Два СВФ, ему тогда нужен LocalConnection, наверное.

winfast
15.02.2008, 22:11
мне необходимо отлавливать ссылки вида - <a href="#bookmark=6">Page 6</a>

ps. SWF - отдельных страниц у меня много (они загружаются динамиески во флеш книгу). Среди них есть отдельная страница, которая тоже загружается в книгу, которая как раз таки и является титульной, и в которой содержатся ссылки...

iNils
15.02.2008, 22:32
мне необходимо отлавливать ссылки вида - <a href="#bookmark=6">Page 6</a>Не выйдет. Без asfunction не обойтись, только она позволяет флешу получать нажатие на ссылку и ее аргументы.

winfast
15.02.2008, 22:39
ну и как мне это сделать при помощи asfunction? ссылки вида - <a href="#bookmark=6">Page 6</a>

Molecula
15.02.2008, 23:07
Вы ссылки в том СВФ, который ТАЙТЛ, как прописываете, руками в СВФ, а потом компилите, или из внешнего ХМЛь файла берете?
Если первое, то asfunction не нужна.

iNils
15.02.2008, 23:10
ну и как мне это сделать при помощи asfunction? ссылки вида - <a href="#bookmark=6">Page 6</a>
http://www.flasher.ru/forum/showpost.php?p=718368&postcount=2
http://www.flasher.ru/forum/showpost.php?p=718408&postcount=4

winfast
15.02.2008, 23:11
Ссылки в том СВФ получается по следующей цепочке:
1. Есть хтмл страница в этими сылками.
2. Делается ПДФ из ХТМЛ.
3. Делается СВФ из ПДФ.

Molecula
16.02.2008, 01:09
3. Делается СВФ из ПДФ.
Как, у вас свой парсер?

winfast
16.02.2008, 01:37
_swftools.org
там есть утилита под линукс, называется pdf2swf.... пользуюсь ею...

2iNils:
Если я напишу в html коде:

<HTML><HEAD>
<TITLE> </TITLE></HEAD>
<BODY>
<H1> </H1>

<a href="http://yandex.ru">YANDEX</a>
<br>
<a href="asfunction:_parent.gotoPage, 4">YANDEX</a>

<BR><BR>
</BODY>
</HTML>


А потом сделать из html --> pdf --> swf

Полученный swf загрузиться в книгу и это сработает?

MrPoma
16.02.2008, 02:44
txt.html = true;
txt.htmlText = '<a href="asfunction:_parent.gotoPage, 4">YANDEX</a>';

iNils
16.02.2008, 02:57
Попробуйте. Я не знаю, что произойдет с кодом в процессе преобразований.

winfast
16.02.2008, 03:01
вот почему то не работает.... интересно почему....

Molecula
16.02.2008, 03:04
В Вашем СВФ который сгенерируется должна быть прописана функция, которая реагирует на разные значения аргументов, которые к ней будут приходить, т.е. Ваши "типы" ссылок.

Вы можете прописать эту функцию в этот генерируемый СВФ?

Может стоить подумать о создании её в глобальном контейнере, куда всё грузите?

_global.myUrls = function (arg:String) {
trace(arg);// выдаст book1;
}

А в ХМЛь так, ну или где там у Вас:
<a href="asfunction:myUrls, book1">David Bowie</a>

Экспериментируйте.

winfast
16.02.2008, 03:28
пробывал почему то не получается...
в хтмле я пишу

<HTML><HEAD>
<TITLE> </TITLE></HEAD>
<BODY>
<H1> </H1>

<a href="http://yandex.ru">YANDEX</a>
<br>
<a href="asfunction:myUrls, 5">YANDEX</a>

<BR><BR>
</BODY>
</HTML>

затем происходит превращение этого всего в свф...

после во флеше коде книги я пишу... такой код

_global.myUrls = function (arg:String) {
_parent.gotoPage(5, true);
}


по идее должен быть перезод на 5ю стр.. но этого не просиходит... почему?

Molecula
16.02.2008, 03:37
Потому что генератор или движок не "подгребает" ссылки из ХТМЛь в СВФ.

Вам нужно сделать трепанацию черепа СВФ, посмотреть что там, вшить ссылки на мувики, зашить и сгенерировать заново.

Почитать доки на pdf2swf, может там есть лозейка.

winfast
16.02.2008, 10:45
хм... нет, ну почему же... обычные ссылки например <a href="http://yandex.ru">yandex</a> вполне остаются кликабельными.. то есть при клике во флешке на них просиходит переход на yandex... хм а вот почему же требуемые ссылки не выполняются...... ?

ps.
а вот кстати параметры той утилиты.... но я там ничего нужно не заметил, чтобы можно было напрямую с ссылками работать (а может оно и не нужно):

Usage: pdf2swf [Options] input.pdf [-o output.swf]

Basic options:
-p --pages=range Convert only pages in range
-P --password=password Use password for deciphering the pdf
-v --verbose Be verbose. Use more than one -v for greater effect
-q --quiet Suppress normal messages. Use -qq to suppress warnings, also.
-F --fontdir directory Add directory to font search path
-V --version Print program version

Enhanced conversion options:
-S --shapes Don't use SWF Fonts, but store everything as shape
-z --zlib Use Flash 6 (MX) zlib compression (Needs at least Flash 6 Plugin to play)
-w --samewindow Don't open a new Browser Window for Links in the SWF
-f --fonts Store full fonts in SWF. (Don't reduce to used characters)
-T --flashversion=num Set the flash version in the header to num (default: 4)
-s insertstop Insert a "Stop" Tag in every frame (don't turn pages automatically)
-s zoom=factor Scale result, default: 72
-s jpegquality=quality Set quality of embedded jpeg pictures (default:85)
-s caplinewidth=value Set the minimum line width to trigger cap style handling to value. (3)
-s splinequality=value Set the quality of spline convertion to value (0-100, default: 100).
-s fontquality=value Set the quality of font convertion to value (0-100, default: 100).
-s ignoredraworder Ignore draw order (makes the SWF file smaller and faster, but may produce
graphic errors)
-s filloverlap Make intersecting shapes overlap, instead of canceling each
other out. (Needed for some Powerpoint PDFs)
Postprocessing options:
-b --defaultviewer Link default viewer to the pdf (/usr/local/share/swftools/swfs/default_viewer.swf)
-l --defaultpreloader Link default preloader the pdf (/usr/local/share/swftools/swfs/default_loader.swf)
-B --viewer=filename Link viewer "name" to the pdf ("pdf2swf -B" for list)
-L --preloader=filename Link preloader "name" to the pdf ("pdf2swf -L" for list)
pavel@gothica:~> pdf2swf
Usage: pdf2swf [Options] input.pdf [-o output.swf]

Basic options:
-p --pages=range Convert only pages in range
-P --password=password Use password for deciphering the pdf
-v --verbose Be verbose. Use more than one -v for greater effect
-q --quiet Suppress normal messages. Use -qq to suppress warnings, also.
-F --fontdir directory Add directory to font search path
-V --version Print program version

Enhanced conversion options:
-S --shapes Don't use SWF Fonts, but store everything as shape
-z --zlib Use Flash 6 (MX) zlib compression (Needs at least Flash 6 Plugin to play)
-w --samewindow Don't open a new Browser Window for Links in the SWF
-f --fonts Store full fonts in SWF. (Don't reduce to used characters)
-T --flashversion=num Set the flash version in the header to num (default: 4)
-s insertstop Insert a "Stop" Tag in every frame (don't turn pages automatically)
-s zoom=factor Scale result, default: 72
-s jpegquality=quality Set quality of embedded jpeg pictures (default:85)
-s caplinewidth=value Set the minimum line width to trigger cap style handling to value. (3)
-s splinequality=value Set the quality of spline convertion to value (0-100, default: 100).
-s fontquality=value Set the quality of font convertion to value (0-100, default: 100).
-s ignoredraworder Ignore draw order (makes the SWF file smaller and faster, but may produce
graphic errors)
-s filloverlap Make intersecting shapes overlap, instead of canceling each
other out. (Needed for some Powerpoint PDFs)
Postprocessing options:
-b --defaultviewer Link default viewer to the pdf (/usr/local/share/swftools/swfs/default_viewer.swf)
-l --defaultpreloader Link default preloader the pdf (/usr/local/share/swftools/swfs/default_loader.swf)
-B --viewer=filename Link viewer "name" to the pdf ("pdf2swf -B" for list)
-L --preloader=filename Link preloader "name" to the pdf ("pdf2swf -L" for list)
pavel@gothica:~> pdf2swf
Usage: pdf2swf [Options] input.pdf [-o output.swf]

Basic options:
-p --pages=range Convert only pages in range
-P --password=password Use password for deciphering the pdf
-v --verbose Be verbose. Use more than one -v for greater effect
-q --quiet Suppress normal messages. Use -qq to suppress warnings, also.
-F --fontdir directory Add directory to font search path
-V --version Print program version

Enhanced conversion options:
-S --shapes Don't use SWF Fonts, but store everything as shape
-z --zlib Use Flash 6 (MX) zlib compression (Needs at least Flash 6 Plugin to play)
-w --samewindow Don't open a new Browser Window for Links in the SWF
-f --fonts Store full fonts in SWF. (Don't reduce to used characters)
-T --flashversion=num Set the flash version in the header to num (default: 4)
-s insertstop Insert a "Stop" Tag in every frame (don't turn pages automatically)
-s zoom=factor Scale result, default: 72
-s jpegquality=quality Set quality of embedded jpeg pictures (default:85)
-s caplinewidth=value Set the minimum line width to trigger cap style handling to value. (3)
-s splinequality=value Set the quality of spline convertion to value (0-100, default: 100).
-s fontquality=value Set the quality of font convertion to value (0-100, default: 100).
-s ignoredraworder Ignore draw order (makes the SWF file smaller and faster, but may produce
graphic errors)
-s filloverlap Make intersecting shapes overlap, instead of canceling each
other out. (Needed for some Powerpoint PDFs)
Postprocessing options:
-b --defaultviewer Link default viewer to the pdf (/usr/local/share/swftools/swfs/default_viewer.swf)
-l --defaultpreloader Link default preloader the pdf (/usr/local/share/swftools/swfs/default_loader.swf)
-B --viewer=filename Link viewer "name" to the pdf ("pdf2swf -B" for list)
-L --preloader=filename Link preloader "name" to the pdf ("pdf2swf -L" for list)
pavel@gothica:~> pdf2swf
Usage: pdf2swf [Options] input.pdf [-o output.swf]

Basic options:
-p --pages=range Convert only pages in range
-P --password=password Use password for deciphering the pdf
-v --verbose Be verbose. Use more than one -v for greater effect
-q --quiet Suppress normal messages. Use -qq to suppress warnings, also.
-F --fontdir directory Add directory to font search path
-V --version Print program version

Enhanced conversion options:
-S --shapes Don't use SWF Fonts, but store everything as shape
-z --zlib Use Flash 6 (MX) zlib compression (Needs at least Flash 6 Plugin to play)
-w --samewindow Don't open a new Browser Window for Links in the SWF
-f --fonts Store full fonts in SWF. (Don't reduce to used characters)
-T --flashversion=num Set the flash version in the header to num (default: 4)
-s insertstop Insert a "Stop" Tag in every frame (don't turn pages automatically)
-s zoom=factor Scale result, default: 72
-s jpegquality=quality Set quality of embedded jpeg pictures (default:85)
-s caplinewidth=value Set the minimum line width to trigger cap style handling to value. (3)
-s splinequality=value Set the quality of spline convertion to value (0-100, default: 100).
-s fontquality=value Set the quality of font convertion to value (0-100, default: 100).
-s ignoredraworder Ignore draw order (makes the SWF file smaller and faster, but may produce
graphic errors)
-s filloverlap Make intersecting shapes overlap, instead of canceling each
other out. (Needed for some Powerpoint PDFs)
Postprocessing options:
-b --defaultviewer Link default viewer to the pdf (/usr/local/share/swftools/swfs/default_viewer.swf)
-l --defaultpreloader Link default preloader the pdf (/usr/local/share/swftools/swfs/default_loader.swf)
-B --viewer=filename Link viewer "name" to the pdf ("pdf2swf -B" for list)
-L --preloader=filename Link preloader "name" to the pdf ("pdf2swf -L" for list)

winfast
18.02.2008, 12:39
Сделал ссылку в свфе:

<a href="asfunction:tree, 5">YANDEX</a>


В книге есть фнкция:

_global.tree = function(str:String)
{
gotoPage(str, true);
}


Почему при клике в книге на странице НА ССЫЛКУ не происходит выполнение функции?(

ps. у меня сомнения на счет того, что вообще почемуто asfunction работает... в моем случае...хм

iNils
18.02.2008, 13:17
Этот вопрос надо разбить на две части.
1. Происходит ли вызов tree?
2. Виден ли в tree метод gotoPage?

winfast
18.02.2008, 13:51
У меня не происходит вызов метода gotoPage если мы его вызываем со страницы в книге (если он прописан в самой подгружаемой странице).
То есть если у меня на странице написан код

...
list_txt.htmlText += "<a href=\"asfunction:myUrls, track2.mp3\">Track 2</a><br>";
...


а в книге есть функция

_global.myUrls = function (arg:String) {
gotoPage(5, true);
}


то она не вызывается.... То есть почемуто НЕ НАХОДИТ метод gotoPage.... интересно почему?

iNils
18.02.2008, 21:01
а в книге есть функция _global.myUrls, то она не вызывается.... То есть почемуто НЕ НАХОДИТ метод gotoPage.... интересно почему?Вы определитесь.
Не вызывается myUrls или gotoPage в ней?
Это совсем разные вещи.

winfast
19.02.2008, 22:14
_global.myUrls... то есть!

silin
20.02.2008, 00:27
не очень внимательно читал топик, но по сабжу:
может поможет известный фокус со специфическим цветом a:hover и определением его на клике..
var tf:TextField;
var CSS:String = " a {color: #0000FE;}, a:hover {color: #0000FF;}";

tf = this.createTextField("tf", 0, 0, 0, 400, 300);
tf.wordWrap = true;
tf.html = true;

tf.styleSheet = new TextField.StyleSheet();
tf.styleSheet.parseCSS(CSS);
tf.htmlText = 'А потом проверить, если ссылка вида, предположим, <a href="http://some_site_here">link1</a>,';
tf.htmlText+= 'то ничего не делать. А если ссылка имеет вид - <a href="#bookmark=7">link2</a> то выполнять какое нибудь действие.';

function onMouseDown() {
var fmt:TextFormat;
for (var i = 0; i < tf.text.length;i++ ) {
fmt=tf.getTextFormat(i,i+1);
if(fmt.color==0x0000FF){//цвет hover, т.е. мышь на ссылке
trace(fmt.url);//урл этой ссылки, пропарсить(определить ее тип) уже не вопрс
return;
}
}
}

Molecula
20.02.2008, 04:33
Э, да мы тут просто пытаемся заставить asfunction работать.

winfast,
_global.myUrls = function (arg:String) {
trace('hi');
}

Трейс hi выдает?

winfast
20.02.2008, 15:08
нет... говорю же что MyUrls почему-то не видна........ (

Alkonavt
16.03.2008, 14:45
Приветствую всех. Продолжаю работу над флешкой уже я )
Декомпилировал свф с ссылками. Оказывается, там всё это генерируется не в текстовые поля с htmlText, а в кнопки со скриптами
on(press){
getURL("http://yandex.ru", "_this");
}
asfunction с getURL не работает.
У меня есть возможность менять только url в getURL (т.е. вместо http://yandex.ru могу написать что угодно, в остальном генерацию свф никак повлиять не могу)
Есть ли способ заставить getURL работать аналогично asfunction'у?

Alkonavt
16.03.2008, 14:53
Ан, нет. getURL всё же работает с asfunction ) Прошу прощения за беспокойство )

Alkonavt
22.03.2008, 13:38
Мдаа... Обновил flash player до 9 версии и всё... asfunction уже не работает там (наверное, из-за вот этого: http://www.adobe.com/support/security/bulletins/apsb07-20.html )

Есть ли другие способы организовать подобную функциональность?