none
Проблемы с кросс-браузерностью JS RRS feed

  • Общие обсуждения

  • Здраствуйте! Есть страничка index.html , в ней находится табличка, с этой табличкой можно что-то сделать(неважно что). Нужно с помощью js создать iframe и в него же загрузить этоту же страничку index.html и в этом iframe должны работать те же модификации его таблички. То есть должно получаться матрёшка из фреймов - главная страничка с таблицей и кнопкой. Нажали на кнопку - появился фрейм с этой же страничкой, если в нём нажать на кнопку то в нём же появится еще один фрейм с той же табличкой и кнопкой. И так далее.
    В коде выше всё работает до момента:
    var tab = ifrm_content.getElementsByTagName("table")[0]; getElementsByTagName - ничего не возвращает в IE9 и FireFox4.
    Но в Opera10 работает. В div solution, видно при отладке, код добовляется. Куда девается или почему не берется код c iframe в методе iframe_load?
    Если frm.setAttribute("src","copy_of_index.html"); указать копию index.html, то всё отлично отработает. До момента когда во внутренем фрейме пытаются создать еще один внутрений фрейм.
    Почему возникают проблемы когда в фрейм пытаюсь загрузить ту же страницу с которой был вызван скрипт?
    this.frame;
    	this.newFrame = function (id)
    	{
    		var frm = document.createElement("iframe"); 
    		frm.setAttribute("id",id);
    		frm.setAttribute("src","index.html");
    		frm.setAttribute("width",500); 
    		frm.setAttribute("height",250);		
    		frm.setAttribute("frameBorder",0);
    		
    		if (navigator.appName != 'Microsoft Internet Explorer')
    					frm.setAttribute("onload","task.iframe_load()");
    		else
    					frm.setAttribute("onload",task.iframe_load);
    		return frm;		
    	}
    	
    	this.task_5 = function()
    	{
    		task.frame = task.newFrame("ifrm5");	
    		var sol = document.getElementById("solution");
    		sol.innerHTML = "";
    		sol.appendChild(task.frame);
    	}
    	
    	this.iframe_load = function()
    	{
    		try
    		{
    			//var ifrm = document.getElementById("ifrm5");
    			var ifrm = task.frame;
     			var ifrm_content=(ifrm.contentWindow || ifrm.contentDocument);
    			if (ifrm_content.document) ifrm_content=ifrm_content.document;
    			var tab = ifrm_content.getElementsByTagName("table")[0];
    			var cells = tab.getElementsByTagName("td");
    		
    		}
    		catch (err)
    		{
    			alert(err.message);
    		}
    			
    	}		
    

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    Модератор
  • Интересно почему тишина такая... Я как-то не понятно задал вопрос?
  • > То есть должно получаться матрёшка из фреймов

    есть ограничение на вложенность фреймов.
    необходимый html можно запрашивать с сервера или формировать на месте.
    примерно так:

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">
            function load()
            {
                var c = tbl.cloneNode(true);
                document.body.insertAdjacentElement("beforeBegin", c);
            }
        </script>
    </head>
    <body>
        <table border="1" id="tbl">
            <tr>
                <td>1</td><td>2</td>
            </tr>
        </table>
        <button onclick="load()">
            load</button>
    </body>
    </html>
    
    

     


    • Изменено Malobukv 3 сентября 2011 г. 12:37
    3 сентября 2011 г. 12:36