2013-08-19 4 views
0

Я использую SWFObject для воспроизведения SWF-файла Flash. SWF-файл поддерживает несколько переменных вспышки. Когда я пытаюсь передать сложное значение для одной из переменных Flash, которая содержит смесь одиночных и двойных кавычек, что-то плохое происходит, когда SWFObject записывает полностью визуализированный контент в DIV, выделенный для объекта flash.Проблема со смешением котировок в SWFObject addvariable call

Вот ниже код, показывающий DIV с именем flashcontent что SWFObject пишет отображаемое содержимое в и код Javascript, который взаимодействует с SWFObject:

<!-- Div that will receive the Flash object. This DIV is written to by SWFObject.js. Therfore It's name must match the name 
      in the so.write() statement below. --> 
    <div id="flashcontent"> 
    </div> 

    <!-- Div that will receive the Flash object. This DIV is written to by SWFObject.js. Therfore It's name must match the name 
      in the so.write() statement below. --> 
    <div id="flashcontent"> 
    </div> 

    <!-- Create the tag cloud --> 
    <script type="text/javascript"> 
     var so = new SWFObject("/Content/flash/tagcloud.swf", "tagcloud", "600", "400", "7", "#336699"); 

     so.addParam("wmode", "transparent"); 
     so.addVariable("mode", "tags"); 
     so.addVariable("distr", "true"); 
     so.addVariable("tcolor", "0xff0000"); 
     so.addVariable("hicolor", "0x000000"); 

     so.addVariable("tagcloud", "<tags><a href='javascript:showMessage(\"tag1\");' style='9'>tag one</a><a href='javascript:showMessage(\"tag2\");' style='12'>Tag two</a></tags>"); 
     so.write("flashcontent"); 
    </script> 

Как вы можете видеть, что я стараюсь, спасаясь от двойные кавычки вокруг параметров строки, передаваемых моей функции Javascript showMessage(). Однако, когда flashcontent содержание DIV оказываются, это выглядит следующим образом:

<div id="flashcontent"><embed type="application/x-shockwave-flash" src="/Content/flash/tagcloud.swf" width="600" height="400" id="tagcloud" name="tagcloud" bgcolor="#336699" quality="high" wmode="transparent" flashvars="mode=tags&amp;distr=true&amp;tcolor=0xff0000&amp;hicolor=0x000000&amp;tagcloud=<tags><a href='javascript:showMessage(" tag1");'="" style="9">tag one<a href='javascript:showMessage("tag2");' style="12">Tag two</a>"/></div> 

Первый избежал двойных кавычек интерпретируются как немаскированном двойной кавычки и что нарушает форматирование в результате недопустимой гиперссылки. Если я вынимают неэкранированные кавычки, это то, что содержание выглядит следующим образом:

<div id="flashcontent"><embed type="application/x-shockwave-flash" src="/Content/flash/tagcloud.swf" width="600" height="400" id="tagcloud" name="tagcloud" bgcolor="#336699" quality="high" wmode="transparent" flashvars="mode=tags&amp;distr=true&amp;tcolor=0xff0000&amp;hicolor=0x000000&amp;tagcloud=<tags><a href='javascript:showMessage(tag1);' style='9'>tag one</a><a href='javascript:showMessage(tag2);' style='12'>Tag two</a></tags>"></div> 

Теперь форматирование является правильным и веб-страницы, звук. Естественно, я получаю «undefined», когда моя функция ShowMessage() показывает сообщение, потому что tag1 и tag2 являются недопустимыми именами переменных Javascript.

Использует ли SWFObject addvariable метод делает что-либо неортодоксальное для экранированных двойных кавычек? Как создать строку, которую addvariable согласится, чтобы я мог получить двойные кавычки вокруг моих параметров метода Javascript?

ответ

1

Вы используете очень устаревшее издание swfobject. попробуйте последнюю версию (2.2) или 2.3 beta, каждый из них обрабатывает параметры по-разному под капотом. 2.3 может работать лучше всего в вашем случае.

+0

Спасибо. Я не могу найти SWFObject 2.3, только 2.2. У вас есть ссылка? –

+0

2.2 выполнил эту работу. Вы были правы, когда старая копия SWFObject была проблематичной. Если вы когда-нибудь найдете ссылку на 2.3, отправьте сообщение. Еще раз спасибо. –

+1

2.3 бета находится на GitHub. http://github.com/swfobject/swfobject – pipwerks