Динамическое добавление 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, время: 06:46. |