Создать iframe посредством JavaScript

Discussion in 'PHP' started by heJiZzZ, 16 Jul 2012.

  1. heJiZzZ

    heJiZzZ Member

    Joined:
    1 Jun 2009
    Messages:
    40
    Likes Received:
    18
    Reputations:
    10
    есть простой код
    Code:
    <iframe name="iframe" src="http://site.ru" style="width: 640px; height: 800px;"></iframe>"
    можно ли его в javascript'e представить (мне нужно для последующей обфускации) и будет ли этот фрейм работать только в пределах <head> </head>
     
  2. d1v

    d1v Elder - Старейшина

    Joined:
    21 Feb 2009
    Messages:
    677
    Likes Received:
    332
    Reputations:
    120
    PHP:
    <script>document.write('<iframe name="iframe" src="http://site.ru" style="width: 640px; height: 800px;"></iframe>');</script>
    дорвейщики, такие дорвейщики.
     
  3. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    нет, не будет
     
  4. heJiZzZ

    heJiZzZ Member

    Joined:
    1 Jun 2009
    Messages:
    40
    Likes Received:
    18
    Reputations:
    10
    я это уже нагуглил, не пашет почему-то :mad:

    (код ставился за пределами </head>, но обычный то фрейм работает!
     
  5. d1v

    d1v Elder - Старейшина

    Joined:
    21 Feb 2009
    Messages:
    677
    Likes Received:
    332
    Reputations:
    120
    юзай frameset
     
  6. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Code:
    var iframe = document.createElement('iframe');
    iframe.name = 'iframe';
    iframe.src = 'http://site.ru';
    iframe.style.width = '640px';
    iframe.style.height = '800px';
    window.onload = function() {
    	document.getElementsByTagName('body')[0].appendChild(iframe);
    };
     
  7. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    168
    Reputations:
    65
    Melfis, а если боди нет? )

    Какбы универсально:

    document.write('<div id="outhere"></div>');
    var iframe = document.createElement('iframe');
    iframe.name = 'iframe';
    iframe.src = 'http://site.ru';
    iframe.style.width = '640px';
    iframe.style.height = '800px';
    window.onload = function() {
    document.getElementById('outhere').appendChild(iframe);
    };


    + Виндов.онлоад некорректно.
     
    #7 |qbz|, 17 Jul 2012
    Last edited: 17 Jul 2012
  8. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Нашёл к чему придираться ) с такими "если", можно целый фреймворк написать.

    Чем?
     
  9. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    по законам феншуя.
     
    1 person likes this.
  10. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    168
    Reputations:
    65
    Некорректно ибо кроме этого кода на странице может теоретически быть и другой код, привязанный к онлоад. Вот смотри примерчик яркий:

    HTML:
    <script>
    	window.onload = function(){alert(1);};
    	window.onload = function(){alert(2);};
    </script>
    Выведет только ОДИН алерт (второй).

    А чтобы к онлоаду привязать много разных действий, то следует заюзать функцию что-то типа:

    HTML:
    function bindEvent(funct)
    {
    	window[((window[($aEL='addEventListener')])?($aEL):('attachEvent'))]
    	(
    		((window[$aEL])?(''):('on'))+"load",funct,((window[$aEL])?(!1):(null))
    	);
    }
    и юзать таким образом:

    HTML:
    bindEvent(function(){alert(1);});
    bindEvent(function(){alert(2);});
    Я, конечно, понимаю, что это мелочи, но они тоже имеют место быть.
     
    1 person likes this.
  11. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,308
    Reputations:
    1,557
    Можешь привести пример страницы без боди? Как-то не верится, что такое бывает.

    P.S.: Не обязательно этот пример должен быть на настоящем сайте. Подойдет даже самописный html-код.
     
    #11 M_script, 17 Jul 2012
    Last edited: 17 Jul 2012
  12. Metho

    Metho New Member

    Joined:
    18 Nov 2011
    Messages:
    182
    Likes Received:
    2
    Reputations:
    0
    подскажите, можно ли менять фрейм в зависимости от старонних параметров? Например юзер агента.

    под выбранные агенты свой фрейм
     
  13. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    168
    Reputations:
    65
    Конкретно в зависимости от юзер-агента - можно. Так как за это отвечает JS-обьект navigator (конкретнее: navigator.userAgent). А вот ip-адрес, например, нельзя (только если сочетать ajax с php, который его выводит).
     
  14. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,308
    Reputations:
    1,557
    Ты о чем? :confused:

    upd:
    Понятно. Процитировал одно сообщение, а ответил на другое. :)
    Ответь на мое тоже. Как может не быть body?
     
    #14 M_script, 18 Jul 2012
    Last edited: 18 Jul 2012
  15. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    168
    Reputations:
    65
    Ну вот так, например.

    HTML:
    <html>
    <head>
    <title>Web Page</title>
    </head>
    <h1>It Works!</h1>
    </html>
    Оно запустится, 100%.

    Если серьезно - то либо я не понимаю как ты можешь не понимать, что без боди может быть пропарсен хтмл код без ошибок либо ты имеешь ввиду что-то другое, более коварное.
     
  16. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,308
    Reputations:
    1,557
    Сейчас мы это узнаем :)

    Я добавил в твой html-код небольшой скрипт перед закрывающим тегом head
    PHP:
    <script>
    window.onload = function()
    {
        if(
    document.getElementsByTagName('body')[0]) // проверяем наличие body
            
    alert('good body');
        else
            
    alert('bad body');

        if(
    document.getElementsByTagName('body2')[0]) // проверяем наличие body2 (для сравнения)
            
    alert('good body2');
        else
            
    alert('bad body2');
    }
    </script>
    И залил полученную страницу на хостинг.
    Попробуй зайти на эту страницу - http://mscript.biz/body_test.html

    Какие алерты сработали? Почему так получилось?
     
    #16 M_script, 18 Jul 2012
    Last edited: 18 Jul 2012
  17. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Человеку явно нужно было одно событие, а не портянка. Он же не спрашивал как правильнее создать обработчик для дома. Я понимаю, что можно вешать много обработчиков на онлоад и что лучше писать кроссбрауз attachEvent. Но если уж на то пошло, то ещё более правильным способом будет вообще использовать ооп, в котром будет главный объект, а у него метод init. Который собсна будет запускаться из window.onload = function () { mainClass.init() };
     
  18. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    168
    Reputations:
    65
    M_script, хм, интересно, а ты уверен что на этом не запинаются старые браузеры? Просто я судил из чистой логики - нет тега => нет обьекта.

    Melfis, да, именно так. Но ООП я бы не стал юзать, так как если это, например, ПП какая-нибудь или код счетчика или сторонний плагин - то тогда пришлось бы править js-код исходной страницы, чтобы все сделать на ООП.
     
  19. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,308
    Reputations:
    1,557
    JS работает не с HTML-файлом, а с DOM. Браузер перед отображением страницы устраняет ошибки кода и приводит к стандарту HTML.
    Например, опера видит код
    PHP:
    <!a>
    <
    b c d/e=/fg=''>
    так
    PHP:
    <!--a-->
    <
    b c="" d="" e="/f="></b>

    p.s.: простой, но полезный инструмент - http://html5sec.org/innerhtml
     
    1 person likes this.
Loading...