Динамически добавлять SWFObject с помощью Wicket - PullRequest
0 голосов
/ 01 февраля 2011

Я пытаюсь добавить файл Flash (* .swf) в свое приложение 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-файлы?

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

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

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

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

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

0 голосов
/ 02 февраля 2011

Как я понял ваш вопрос, вы хотите изменить 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.

...