Я думаю, что проблема в том, что вы зацикливаетесь на длине динамического массива, возвращенного из getElementsByTagName('object')
, а затем внутри этого цикла вы добавляете новый тег объекта, который увеличит массив, что приведет к расширению цикласнова, который добавит еще один объект, который снова будет расширять цикл - навсегда.Вы можете исправить это, не зацикливаясь на .length, но получая длину исходного массива и только зацикливаясь на этом.Вот и другие вещи, которые я предлагаю вам исправить.
- Используйте локальные переменные, а не глобальные переменные.
- Когда вы используете getElementsByTagName, они возвращают динамические массивы, которые могут изменяться по длине при манипулированиивещи.Надежнее выполнять цикл по начальной длине и, следовательно, никогда не иметь риска бесконечного цикла.
- Вы можете использовать
document.body
вместо document.getElementsByTagName('body')[0]
. - Некоторые точки с запятой отсутствуют.
Вот исправленный код с этими фиксированными / защитными функциями.
function get2(){
var swf = document.getElementsByTagName('object');
for (var j = 0, len = swf.length; j < len ; j++ )
{
var objs = swf[j].getElementsByTagName('param');
for(var i=0, oLen = objs.length; i < oLen; i++){
var id = objs[i].getAttribute('name');
if (id == 'src'){
var source = objs[i].getAttribute('value');
var dv = document.createElement('div');
dv.setAttribute('id','myContent');
dv.setAttribute('border','2');
document.body.appendChild(dv);
/* code to embed a new swf object in new Div*/
}/*if*/
}/*for*/
}/*outer for*/
}/*function*/
При использовании любого из этих динамических массивов я всегда предварительно извлекаю длину массива в локальную переменную и зацикливаюсь начтобы избежать возникновения такой ситуации.