2009-07-14 4 views
0

Я работаю над этим проектом Flash, и я построил swf, где все ресурсы экспортируются в кадр 5, а первый кадр содержит предварительный загрузчик. Когда предварительный загрузчик завершен, он переходит к кадру 10, где начинается фактический сайт. Это отлично работает.Проблема с глубоким связыванием Flash Player

Тем не менее, в каждом браузере, который я тестировал до сих пор (FF, IE, Chrome и Safari), когда я помещаю # на URL-адрес, похоже, что поведение браузера сначала загружает весь swf, а затем начинает воспроизведение это с конечным результатом, что требуется некоторое время для загрузки swf (пустой экран), ноты предварительного загрузчика на 100%, а затем swf продолжается до места.

Буду признателен, если кто-нибудь сможет подтвердить это поведение и любой ввод, чтобы пролить свет на эту проблему.

UPDATE:

Благодаря rhtx за указание это некорректное поведение проигрывателя Flash Player. В некотором роде я могу понять, почему это так, но это работает, только если вы делаете линейные фильмы, которых у меня нет. В настоящее время это означает, что мне нужно создать метку для каждого места глубокой ссылки в первом кадре, что, конечно, невозможно, если ваш путь управляется содержимым.

Есть ли способ преодолеть эту вторую проблему?

+0

Возможно, вы можете проверить URL-адрес в JS, и если присутствует пустой хеш, перейдите в то же место без хэша. Кроме того, вы можете попробовать перейти на тот же URL-адрес с помощью «# /» вместо «#», но я думаю, что это, вероятно, приведет к созданию такого же поведения. –

+0

Вы также можете попробовать предложение asperous.us. Может быть, будет немного неуклюже, но, по крайней мере, это должно сработать. –

ответ

1

Я предполагаю, что this bug вызывает у вас проблемы. This guy некоторое время рассказывал о характере этой ошибки.

Хотя это звучит так, будто вы не используете flex, я не удивлюсь, если эта ошибка также будет испускать чистую вспышку as3.

Ошибка была недавно закрыта. Решение: сделайте небольшой предварительный загрузчик swf для загрузки основного swf (например asperous.us).

См. Также this s.o. q & a.

+0

Вы, кажется, заработали себе щедрость. Congrats! – Luke

1

Вы можете создать «контейнерный» swf, единственной задачей которого является загрузка реального swf. Таким образом, неважно, будет ли swf на странице загружаться полностью, прежде чем он запустится, так как это будет всего лишь несколько килобайт.

+0

Так я и делал это в «старые времена». Теперь мне нравится использовать этот подход в качестве крайней меры. – Luke

2

У меня была довольно сумасшедшая проблема с написанием и чтением локальных SharedObjects, когда в URL было #. Это было больно, и я никогда не мог полностью прибить его. Не то же самое, с которым вы имеете дело, но я могу подтвердить, что FP может действовать по-разному в некоторых случаях, когда в URL есть «#».

I думаю Что может случиться в вашем случае, так это то, что Flash Player ищет якорь из-за символа «#». Я предполагаю, что он продолжает искать, пока весь SWF не загрузится, и он видит, что в SWF нет привязки к нему, чтобы он соответствовал.

Вы могли бы попробовать что-то вроде этого:

Добавить новый слой в вашем FLA на основной временной шкале. На первом кадре создайте привязку (добавьте ключевой кадр, назовите фрейм и выберите опцию «Якорь», когда вы его назовете). Повторите попытку загрузки своей страницы, но после символа хеша введите имя якоря. Если он загружается по желанию, возможно, что-то может догадываться.

Надеюсь, что помогает.

+0

Пятно на! Однако это накладывает следующую проблему. См. Мое обновление. – Luke

+0

Да. Тьфу. Я просто сделал пару поисков, чтобы узнать, могу ли я узнать что-нибудь об отключении DeepLinking, но ничего не придумал. В Flex вы, возможно, сможете справиться с этим, но не похоже, что для Flash существует открытый способ. Меньше всего, что я видел через 20 минут. Похоже, вы должны определить, как обращаться с «пустым» якорем. –

+0

@rhtx: Да, я надеялся на какой-то фик-кард, но ничего не нашел. Интересно, как Flex это делает. Возможно, есть способ вставить некоторые настройки в swf, или, может быть, я могу скомпилировать некоторые метаданные. До сих пор я тоже ничего не мог найти. Я был бы признателен, если бы вы узнали что-нибудь, связанное с этой проблемой, если бы вы разместили свои результаты здесь. Благодаря! – Luke

1

Я знаю об этой ошибке сейчас и использую метод контейнера, чтобы обойти его.Но я ненавижу контейнерный метод, поэтому я спорадически просматриваю в Интернете решения.

Rhtx на помощь ..

Не совсем чиста, как это должно быть, но им вполне доволен, как он работает ..

Путь я реализовал это сейчас, у меня есть кадр Ярлык типа anchor с именем «loading» на кадре 1 (кадр 2, где работает мое приложение).

Затем я использую кусок JavaScript, чтобы загрузить мой флэш-сайт, который в основном делает это:

//pseudo javascript 
var path = ""; 
function buildFlash() { 
    path = location.hash.length > 1 ? location.hash.substr(1) : ""; 
    location.hash = "loading"; 
    $(document).ready(onDOMReady); //could probably directly load the swf now 
} 

function onDOMReady() { 
    swfobject.embedSWF(... with path flashvar ...); 
} 

Причина это работает для меня, я называю функцией ExternalInterface («setPath», путь) от flash, чтобы установить хеш, который, в свою очередь, также проходит путь к googleanalytics.

Лицо, посещающее url http://www.site.com/#about/, увидит загрузку url/#, когда сайт загружается, когда загрузка завершена, приложение flash определяет, куда должен идти пользователь, и соответственно изменяет URL.

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