2014-09-17 11 views
7

Sto provando ad installare l'altezza del contenuto iframe attraverso angolareCome impostare l'altezza del contenuto iframe nel mio caso?

ho qualcosa di simile

<iframe id='iframe' width='100%' height='600px' data-ng-init="init('iframe')" 
src='http://test.com' /> 

nel mio controller

$scope.init = function(id) { 
      console.log($('#'+ id)) -> show my iframe 
      var x= $('#'+ id)..contentWindow.document.body.scrollHeight; 
      console.log(x) -> gives me undefined 

      var y = $('#'+ id)..contentWindow; 
      console.log(y) -> give me undefined too 
     } 

Come impostare l'altezza contenuti iframe attraverso il mio controllore?

Grazie!

+0

Impostare l'altezza iframe al '100%', e avvolgerlo in un div genitore che si controlla come per qualsiasi al solito metodo (come css). –

+0

La manipolazione del DOM dovrebbe invece essere eseguita all'interno di una direttiva. Per un esempio approssimativo, vedi http://plnkr.co/edit/KgrhJg7xKQqxm9pho4SH?p=preview – miqid

risposta

8

Alcune osservazioni dal codice:

  1. ng-init non è l'equivalient di $(window).on("load", function(){...}), ulteriori informazioni su ng-init qui: https://docs.angularjs.org/api/ng/directive/ngInit. Ecco perché stai ricevendo undefined per x e , perché quando viene eseguito quel codice l'iframe non è ancora stato caricato.

  2. In angolare non è una buona idea accedere al DOM dal controller, considerare invece di eseguire tali operazioni in una direttiva.

  3. Se si inizia con angularjs, si consiglia di provare a non utilizzare jQuery.

Nel tuo caso penso che ciò che si vuole è quello di definire una direttiva come iframeSetDimentionsOnload e impostare l'altezza lì. Ti darò in esempio in pochi minuti.

tuo direttiva iframeSetDimensionsOnload:

yourApp.directive('iframeSetDimensionsOnload', [function(){ 
return { 
    restrict: 'A', 
    link: function(scope, element, attrs){ 
     element.on('load', function(){ 
      /* Set the dimensions here, 
       I think that you were trying to do something like this: */ 
       var iFrameHeight = element[0].contentWindow.document.body.scrollHeight + 'px'; 
       var iFrameWidth = '100%'; 
       element.css('width', iFrameWidth); 
       element.css('height', iFrameHeight); 
     }) 
    } 
}}]) 

usare in questo modo:

<iframe iframe-set-dimensions-onload src='http://test.com' /> 
+0

@FlyingCat per favore guarda il mio ultimo aggiornamento e fammi sapere se questo risolve il tuo problema. Grazie! – Josep

+0

Grazie mille Josep – FlyingCat

+0

Se provo ad ottenere l'altezza nella mia console ottengo l'errore: 'Bloccato un frame con origine" http: // localhost: 3000 "dall'accesso a un frame di origine incrociata. Quando lo si prova con il direttiva non viene mai attivato l'onload, un console.log prima del log del listener di eventi. –

Problemi correlati