[SalesForce] Automatic Resizing of Canvas App in Visualforce Page

I have created a canvas app and am hosting it on Heroku. I then added this app to a Visualforce page, along with the required Salesforce SDK (which is hosted on heroku).

Because this app will be used on different devices (mainly mobile) I added the autogrow function, however I cannot seem to get it to work. My visualforce page code is shown below:

    <apex:page controller="connectDataController" showHeader="false" sidebar="false" standardStylesheets="true" docType="html-5.0" language="en-US" applyHtmlTag="false">      

<apex:canvasApp canvasId="mycanvas0" developerName="x" id="mycanvas0" /> 

<script> type="text/javascript" src="/sdk/js/controller.js"  </script>
<script> type="text/javascript" src="/sdk/js/client.js" </script> 
<script> type="text/javascript" src="/sdk/js/canvas-all.js" </script> 

 <script>
    // Turn on auto grow with default settings.
    Sfdc.canvas(function() {
    alert("In function");
    var sr = JSON.parse('<%-JSON.stringify(canvasDetails)%>');
    console.log("CONSOLE.LOG FROM VF : " + sr.userId);
    alert("after var");
    alert(sr.environment.dimensions.width);
    Sfdc.canvas.client.autogrow(sr.environment.dimensions);
    });

    alert("Test End");
</script> </apex:page>

When I visit the page, the canvas app defaults to the standard size, and only the alerts saying "In function" and "Test End" are displayed.

Anybody have any ideas of what might be going wrong?

Thanks

Best Answer

Request for autogrow should happen in Heroku not in the Visualforce page. The canvas app (the iFrame) needs to tell the parent (Visualforce page) that it wants to grow. You should add below code on Heroku side

var sr = JSON.parse('<%=signedRequestJson%>');
Sfdc.canvas.client.autogrow(sr.client);
Related Topic