Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Перехват ссылки внутри флэша. (http://www.flasher.ru/forum/showthread.php?t=108112)

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

Цитата:

Сообщение от winfast
мне необходимо отлавливать ссылки вида - <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

Цитата:

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

http://www.flasher.ru/forum/showpost...68&postcount=2
http://www.flasher.ru/forum/showpost...08&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/securit...apsb07-20.html )

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


Часовой пояс GMT +4, время: 09:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.