Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398

    Ridimensionare un iframe con javascript

    Ciao a tutti

    sto facendo una cosa un po particolare
    voglio dare la possibilità ai miei utenti di mettere nel proprio sito un iframe che punta alle mie pagine
    evitando lo scroll verticale.

    Una volta riempita una form genero il seguente codice da copiare e incollare nella propria pagina web


    Codice PHP:
    <script language="JavaScript">
    <!--
    function 
    ifrHeight()  {
    var 
    ifrHeight=document.getElementById('rosterEmbedded').contentWindow.document.body.scrollHeight;
    document.getElementById('rosterEmbedded').height=ifrHeight;
    }
    //-->
    </script>

    <iframe id="rosterEmbedded" 
    src="mio sito bla bla ..." 
    width="760px;" scrolling="auto" frameborder="0" height="768" onload="ifrHeight(this); this.scrolling = 'no';" >


    Your browser does not support iframe!</p>
    </iframe> 
    Premetto che in locale tutto mi funziona correttamente e la funzione ifrHeight mi ridimensiona l'iframe.
    Il problema nasce quando porto il tutto su hosting perche' mi da il seguente errore.

    -----
    Permesso negato per ottenere la proprietà Window.document
    ifrHeight()object.html (riga 13)
    onload(load )og5JDk0H...1KA%3D%3D (riga 2)
    [Break on this error] var ifrHeight=document.getElementById('r...ontentWindo w.document.body.scrollHeight;
    -----

    L'errore l'ho capito ma mi chiedo se c'e' un altro modo per ridimensionare l'iframe relativo a un altro dominio.
    Tenete presente che posso modificare sia la pagina linkata sia il codice che linka.

    Qualche suggerimento ?


    Andrea

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Il javascript non può operare su due siti diversi
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Immaginavo certo che ' un limite pesante.
    Ovviero' paginando le tabelle e mettendo l'altezza fissa.

    Hai una libreria semplice o una classe che mi fa il sort e il paging delle tabelle lato client ?
    JavaScript lo conosco poco quel che mi basta per inserire librerie e fare lavoretti semplici

    Andrea

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Non ho capito cosa vuoi, comunque prova ha vedere qui http://javascript.html.it oppure fai una ricerca qui sul forum
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    A me server una cosa cosi pero senza ajax
    tabella paginata

    Data una pagina con una tabella lunga tipo 200 righe vorrei che js mi paginasse e mi facesse vedere solo una porzione delle righe e mi gestisse la paginazione lato clinet senza ulteriori richieste lato server.

    Inoltre gestisse anche la possibilità di ordinare la tabella per colonna selezionata.


    C'e' qualcosa di fatto ? magari che si appoggia a un framework

    Andrea

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premesso che l'impaginazione e operazione lato server, e l'esempio postato con ajax serve solo per non ricaricare la pagina ma l'impaginazione la fa il server. Nel caso fosse possibile ricreare l'impaginazione lato client sarebbe un lavoraccio (visto che dovresti caricare comunque tutti i dati dal server e mostrali a blocchi, ma in questo caso perdi tutti i vantaggi dell'impaginazione) e dubito che tu possa trovare qualcosa di già pronto o che ti aiuti ha farlo.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Conosco tutti i vantaggi di paginazione lato server e sono in grado di farla.
    Ma questo e' un caso particolare dove i dati da visualizzare sono tranquillamente gestibili lato client e non supereranno mai il centinaio di row.

    Tanto e' vero che il problema di paginazione nasce solo dal fatto che non posso ridimensionare l'iframe a piacimento quindi mettero' un altezza fissa e una paginazione lato client che mi consenta di non sforare mai l'altezza fissa dell'iframe.
    Maledetti limiti di sicurezza :P

    grazie comunque mentre spulciavo ho trovato questo tutorial
    provo a seguirlo e scrivero' il risultato se e' accettabile :P

    Ciau

    Andrea

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Ok quell'articolo e' verametne valido.
    vi posto la prova funzionante leggermente modificata da me dovete scaricarvi l'ultima versione di jquery
    le fonti sono

    articolo originale

    codice preso dall'articolo e modificato

    Codice PHP:
    <html>
    <
    head>
    <
    link rel="stylesheet" type="text/css" href="css/main.css"/>

    <
    script type='text/javascript' src='script/jquery.js'></script>

    </head>
    <body>

    <table class="sortable paging">
      <thead>
        <tr>
          <th>Title</th>
          <th>Author(s)</th>
          <th>PublishDate</th>
          <th class="sort-numeric">Price</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Building Websites with Joomla! 1.5 Beta 1</td>
          <td>Hagen Graf</td>
          <td>Feb 2007</td>
          <td >40.9</td>
        </tr>
        <tr>
          <td>Abcd</td>
          <td>Hagen GGraf</td>
          <td>Feb 2007</td>
          <td>30.49</td>
        </tr>
        <tr>
          <td>Efg</td>
          <td>Hagen GGraf</td>
          <td>Feb 2007</td>
          <td>45.49</td>
        </tr>
        <tr>
          <td>MMMM</td>
          <td>eeeaf</td>
          <td>Feb 2007</td>
          <td>47.49</td>
        </tr>
        <tr>
          <td>aBuilding Websites with Joomla! 1.5 Beta 1</td>
          <td>aHagen Graf</td>
          <td>Feb 2007</td>
          <td>100.49</td>
        </tr>
        <tr>
          <td>tAbcd</td>
          <td>tHagen GGraf</td>
          <td>Feb 2007</td>
          <td>40.49</td>
        </tr>
        <tr>
          <td>yEfg</td>
          <td>yHagen GGraf</td>
          <td>Feb 2007</td>
          <td>20.49</td>
        </tr>
        <tr>
          <td>uMMMM</td>
          <td>eeeaf</td>
          <td>Feb 2007</td>
          <td>430.49</td>
        </tr>
      </tbody>
    </table>
    <script type='text/javascript'>
    /*
    --------------------------------------------------
    Table sorting
    --------------------------------------------------
    */
    var alternateRowColors = function($table) {
        $('tbody tr:has(td):odd', $table).removeClass('alt').addClass('odd');
        $('tbody tr:has(td):even', $table).removeClass('odd').addClass('alt');
    };

    $('table.sortable').each(function() {
        var $table = $(this);

        alternateRowColors($table);
        $table.find('th').each(function(column) {
            var findSortKey;
            if ($(this).is('.sort-numeric')) {
                findSortKey = function($cell) {
                  var key = parseFloat($cell.text().replace('/^[^d.]*/', ''));
                    return isNaN(key) ? 0 : key;
                };
            }
            else if ($(this).is('.sort-date')) {
                findSortKey = function($cell) {
                    return Date.parse('1 ' + $cell.text());
                };
            }
            else {
                //($(this).is('.sort-alpha')) {
                findSortKey = function($cell) {
                    return $cell.find('.sort-key').text().toUpperCase() + ' ' + $cell.text().toUpperCase();
                };
            }

            if (findSortKey) {
                $(this).addClass('clickable').hover(
                    function() {
                        $(this).addClass('hover');
                    }
                    , function() {
                        $(this).removeClass('hover');
                    }
                )
                .click(function() {
                    var newDirection = 1;
                    if ($(this).is('.sorted-asc')) {
                        newDirection = -1;
                    }
                    rows = $table.find('tbody > tr').get();
                    $.each(rows, function(index, row) {
                        row.sortKey = findSortKey($(row).children('td').eq(column));
               });

                    rows.sort(function(a, b) {
                      var result = 0;
                      if (a.sortKey < b.sortKey) result = -1;
                      if (a.sortKey > b.sortKey) result = 1;
                      result = result * newDirection;
                        //if (a.sortKey [b] b.sortKey) return newDirection;
                        
                        return result;
                    });

                    $.each(rows, function(index, row) {
                        $table.children('tbody').append(row);
                        row.sortKey = null;
                    });

                    $table.find('th').removeClass('sorted-asc').removeClass('sorted-desc');
                    var $sortHead = $table.find('th').filter(':nth-child(' + (column + 1) + ')');
                    if (newDirection == 1) {
                        $sortHead.addClass('sorted-asc');
                    }
                    else {
                        $sortHead.addClass('sorted-desc');
                    }
                    $table.find('td').removeClass('sorted')
                        .filter(':nth-child(' + (column + 1) + ')')
                            .addClass('sorted');

                    alternateRowColors($table);
                    $table.trigger('repaginate');
                });
            }
        });
    });

    /*
    --------------------------------------------------
    Table paging
    --------------------------------------------------
    */
    $('table.paging').each(function() {
        var currentPage = 0;
        var numPerPage = 3;

        var $table = $(this);

        $table.bind('repaginate', function() {
            $table.find('tbody tr').show()
                .filter(':lt(' + currentPage * numPerPage + ')')
                    .hide()
                .end()
                .filter(':gt(' + ((currentPage + 1) * numPerPage - 1) + ')')
                    .hide()
                .end();
        });

        var numRows = $table.find('tbody tr').length;
        var numPages = Math.ceil(numRows / numPerPage);

        if (numPages > 1) {
            var $pager = $('[/b]<div class="pager">[b]');

            //$('<span class="pager-results">' + numRows + ' results found').appendTo($pager);
            //$('<span class="pager-message">Showing page ' + (currentPage + 1) + ' of ' + numPages + '').appendTo($pager);

            for (var page = 0; page < numPages; page++) {
                $('<span class="page-number">' + (page + 1) + '</span>')
                .bind('click', {'newPage': page}, function(event) {
                    currentPage = event.data['newPage'];
                    $table.trigger('repaginate');
                    $(this).addClass('active').siblings().removeClass('active');
                    $(this).parent().find('.pager-message').text('Showing page ' + (currentPage + 1) + ' of ' + numPages);
                })
                .appendTo($pager).addClass('clickable');
            }

            $pager.find('span.page-number:first').addClass('active');
            $pager.insertBefore($table);
            $table.trigger('repaginate');
        }

    });

    </script>
    </body>
    </html> 

    e questo e' il css relativo
    Codice PHP:
    /* CSS Document */

    div.pager {
      
    padding10px;
      
    margin10px;
    }

    span.page-number {
      
    padding2px;
      
    border-bottom1px #000000 solid;
      
    margin-right10px;
    }

    span.active {
      
    padding2px;
      
    border1px #000000 solid;
      
    margin-right10px;
    }

    table {
      
    width1000px;
    }

    table th {
      
    width25%;
    }

    td.sorted {
      
    background-color#CCCCCC;


    Ciau
    Andrea

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.