Skip to content

iFrame Integration ​

Overview ​

This documentation describes how to integrate external applications into Pitcher using iFrames with bi-directional communication. The integration allows external apps to receive Pitcher canvas data and context information through window messaging.

Architecture ​

The integration consists of two main components:

  1. Pitcher Embedded App - iFrame Window Message Passer (Parent Frame) - Runs within Pitcher
  2. External Application (Child iFrame) - Your external application

Communication Flow ​

Pitcher → iFrame Window Message Passer → iFrame → External App
         ↑                          ↓
         └──────── Messages ────────┘

Implementation Guide ​

Step 1: Create Your External Application ​

Your external application needs to listen for messages from the parent frame.

Example receiver.html (View full example):

javascript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>External App - Canvas Data Receiver</title>
</head>
<body>
    <div id="status">Waiting for canvas data...</div>
    <div id="dataContainer"></div>

    <script>
        // Listen for messages from parent frame
        window.addEventListener('message', function (event) {
            console.log('Received message:', event.data);

            if (event.data.type === 'CANVAS_DATA' && event.data.canvas) {
                const canvas = event.data.canvas;
                
                // Access canvas data
                console.log('Canvas ID:', canvas.id);
                console.log('Canvas Name:', canvas.name);
                
                // Access context data (e.g., Selected Account)
                if (canvas.context && canvas.context.SelectedAccount) {
                    const account = canvas.context.SelectedAccount;
                    console.log('Account Name:', account.Name);
                }
                
                // Update your UI
                document.getElementById('status').textContent = 'Canvas data received!';
                document.getElementById('dataContainer').innerHTML = 
                    `<pre>${JSON.stringify(canvas, null, 2)}</pre>`;
            }
        });
        
        console.log('External app ready and listening for messages...');
    </script>
</body>
</html>

Step 2: Deploy & Configure the URL of the External App in Pitcher ​

Deploy your app to a web URL that supports HTTPS and copy/paste the URL to the iFrame Window Message Passer app settings in Pitcher.

Data Structure ​

Canvas Object ​

The canvas object passed to your external app includes:

javascript
{
    "id": "canvas_uuid",
    "name": "Canvas Name",
    "type": "canvas",
    "context": {
        "SelectedAccount": {
            "Name": "Account Name",
            // ... other Salesforce fields
        },
        // ... other context objects
    },
    "metadata": {
        // ... custom metadata
    },
    // ... other canvas properties
    // Note: 'content' property is excluded for security
}

Message Format ​

All messages follow this structure:

javascript
{
    "type": "MESSAGE_TYPE",
    "body": {
        "action": "action_name",
        "data": { /* payload */ }
    }
}

Security Considerations ​

  1. Origin Validation: In production, replace '*' with specific allowed origins:

    javascript
    if (event.origin !== 'https://your-pitcher-instance.com') return;
  2. Data Filtering: The parent app filters out sensitive content before passing to external apps

  3. HTTPS Required: Always use HTTPS for external applications

  4. Authentication: Implement proper authentication between your external app and backend services

Common Use Cases ​

  1. CRM Integration: Display and update CRM data based on selected Pitcher account
  2. Analytics Dashboards: Show real-time analytics for the current canvas context
  3. External Workflows: Trigger external processes based on canvas data
  4. Data Enrichment: Display additional data from external sources

Testing ​

  1. Deploy your external app to a publicly accessible HTTPS URL
  2. Configure the app in Pitcher with the correct URL
  3. Add the app to a canvas
  4. Verify data is received correctly in browser console
  5. Test with different canvas contexts and accounts

Troubleshooting ​

No data received ​

  • Check browser console for errors
  • Verify iframe URL is correct in app configuration
  • Ensure external app is accessible (no CORS issues)
  • Check message event listener is properly set up

Data missing fields ​

  • Verify the canvas has the expected context
  • Check if fields exist in the source system (e.g., Salesforce)
  • Ensure proper field API names are used

iFrame not loading ​

  • Check Content Security Policy (CSP) headers
  • Verify HTTPS is used for external URLs
  • Check for mixed content warnings

Full Working Example ​

You can download a complete working example of an external application that receives canvas data:

This example demonstrates:

  • Full iframe setup with seamless styling
  • Canvas data extraction and filtering
  • Context data display (including SelectedAccount)
  • Proper message handling patterns
  • Visual feedback when data is received
  • Formatted display of canvas and account information

Support ​

For additional support or questions about iframe integrations in Pitcher, please contact the Pitcher development team or refer to the Pitcher JS API documentation.