2011-02-01 6 views
0

Я пытаюсь добавить файл Flash (* .swf) в приложение Wicket. Я нашел некоторую информацию here, но, к сожалению, она не работает, и я не знаю почему. На веб-странице, элементы и тегДинамически добавлять SWFObject с помощью Wicket

<object wicket:id="swf" data="resources/test.swf" width="700" height="70" style="float: right; margin: 15px 0 0 0;"></object>

делают, как

<object height="70" style="float: right; margin: 15px 0 0 0;" width="140" data="../../resources/wicketapp.ViewPanel/resources/test.swf" type="application/x-shockwave-flash"><param name="movie" value="../../resources/wicketapp.ViewPanel/resources/test.swf"> </object>

Очевидно, что это не путь моего Flash-файла. Кроме того, я хочу загрузить файл динамически, но метод встраивания Flash, обсуждаемый в приведенной выше ссылке, является статическим. Как я могу загружать swf-файлы динамически?

ответ

1

Глядя на связанную реализации, если вы хотите абсолютный путь, который вы должны поставить перед ней косой чертой:

// if it's an absolute path, return it: 
if(src.startsWith("/") || src.startsWith("http://") || src.startsWith("https://")) 
    return(src); 

В противном случае путь калитки ресурса генерируется.

Я бы рекомендовал использовать swfobject для встраивания флеш-памяти. В начале this page есть некоторый код интеграции с калитки, а также компонент на основе флэш-памяти, который его использует.

0

Как я понял, ваш вопрос изменит SWF-файл во время выполнения. У меня решить эту проблему, как показано ниже (это Scala код, но я полагаю, что вы его понимаете):

class SWFObject(id: String) extends WebComponent(id) 
with LoggerSupport { 

    def script: String = """ 
     var swfVersionStr = "10.0.0"; 
     var xiSwfUrlStr = "flash/playerProductInstall.swf"; 
     var flashvars = {}; 
     var params = {}; 
     params.quality = "high"; 
     params.bgcolor = "#ebf4ff"; 
     params.allowscriptaccess = "sameDomain"; 
     params.allowfullscreen = "true"; 
     var attributes = {}; 
     attributes.align = "middle"; 
     swfobject.embedSWF(
       "${name}", "flashContent", 
       "100%", "100%", 
       swfVersionStr, xiSwfUrlStr, 
       flashvars, params, attributes); 
     swfobject.createCSS("#flashContent", "display:block;text-align:left;"); 
    """ 

    /** 
    * Path to SWF file. 
    */ 
    var swfFile: String = _; 

    override def onComponentTag(tag: ComponentTag) = { 
    checkComponentTag(tag, "script") 
    } 

    override def onComponentTagBody(markupStream: MarkupStream, openTag: ComponentTag) = { 
    val relativeName = getRequestCycle() 
     .getProcessor() 
     .getRequestCodingStrategy() 
     .rewriteStaticRelativeUrl(swfFile) 


    val body = body.replace("${name}", relativeName) 
    replaceComponentTagBody(markupStream, openTag, body) 
    } 
} 

Вот пример использования:

private val gameObject = new SWFObject("game"); 
    gameObject.swfFile = "flash/" + swfFile; 

HTML используется SWFObject сценарий и на основе на стандартном экспорте FlashBuilder.

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