Динамическое добавление SWF
function work1() { var test = document.getElementById("player"); var arr = tracks.split(","); for (var i=1; i<=arr.length-1; i++) { VK.Api.call("audio.search", {q: arr[0] + " " + arr[i] }, function (r) { flashvars = AddParam("flashvars", "comment="+ i +"&m=audio&file=" + r.response[1].url); }); var object = document.createElement("object"); object.type = "application/x-shockwave-flash"; object.data = "player.swf"; object.width = "400"; object.height = "55"; var bgcolor = AddParam("bgcolor", "#FFFFFF"); var asa = AddParam("allowScriptAccess", "always"); var movie = AddParam("movie", "player.swf"); object.appendChild(bgcolor); object.appendChild(asa); object.appendChild(movie); object.appendChild(flashvars); test.appendChild(object); }; }; function AddParam(name, value) { if(0 /*@cc_on + 1 @*/) return ['<PARAM name="', name, '" value="', value, '" />'].join(''); else { param.name = name; param.value = value; return param; }; }; Вызов функции и tracks генерируются через PHP. Тестируется пока на Google Chrome 8.0.552.224 и Mozilla Firefox 4 beta 7. Буду благодарен за разъяснение ошибки и наставление на путь истинный. Upd: flashvars на 6ой строке получает значение, но на 21ой она пуста. Причем вызов функции на 6ой строке происходит только при обращении к flashvars на 21ой, после чего выполнение завершается(наверно). Ступор... |
Осознал свою ошибку. Надо дожидаться ответа от сервера. Чем можно поставить цикл на паузу? Не похоже, что через setTimeout. Any help?
|
function work1() { var test = document.getElementById("player"); var arr = tracks.split(","); flashvars=""; for (var i=1; i<=arr.length-1; i++) { VK.Api.call("audio.search", {q: arr[0] + " " + arr[i] }, function (r) { flashvars = '<param name="flashvars" value="comment=' + i + '&m=audio&file=' + r.response[1].url + '" />'; }); object = document.createElement("object"); object.type = "application/x-shockwave-flash"; object.data = "player.swf"; object.width = "400"; object.height = "55"; var bgcolor = '<param name="bgcolor" value="#ffffff" />'; var asa = '<param name="allowScriptAccess" value="always" />'; var movie = '<param name="movie" value="player.swf" />'; object.innerHTML = bgcolor + asa + movie + flashvars; test.appendChild(object); }; }; function AddParam(name, value) { if(0 /*@cc_on + 1 @*/) return ['<PARAM name="', name, '" value="', value, '" />'].join(''); else { param = document.createElement("param"); param.innerHTML = ['<PARAM name="', name, '" value="', value, '" />'].join(''); return param; }; }; В Firefox 4 beta 7(8) такой вот нефеншуйный код работает. :) В Chrome flashvars пропадают(param не создается) где-то по пути. Теряюсь в догадках. :-? |
я чуть не так делал.менял содержимое в теге через innerHtml. под содержимым я имею в виду создание объекта вызов плеера и ссылка на файл. то есть всё кроме названия файла и настроек было статично. и этот объект вкладывал в контейнер-что и давало возможность менять объект через innerHtml. работает во всех браузерах
|
function work1() { window.test = document.getElementById("player"); window.arr = tracks.split(","); window.j = 0; window.timer1 = window.setInterval("gtau()", 350); }; function gtau() { j++; VK.Api.call("audio.search", {q: arr[0] + " " + arr[j] }, function (r) { var object = "<object data='player.swf' width='400' height='55'> "; object += "<param name='bgcolor' value='#ffffff' /><param name='allowScriptAccess' value='always' /> <param name='movie' value='player.swf' /> "; object += "<param name='flashvars' value='comment=" + r.response[1].title + "&m=audio&file=" + r.response[1].url + "' /> </param> </object>"; test.innerHTML += object; }); if (j >= 4) clearInterval(window.timer1); }; И правда, работает. Благодарю. |
Часовой пояс GMT +3, время: 10:41. |