Great for outdoor tailgates, this creamy dip can be prepared in advance and reheated on the grill in a skillet. Place the skillet over indirect heat to avoid burning the edges.
Heat 2 tablespoons of the oil in a 10-inch cast-iron skillet over medium. Add onions, and cook, stirring often, until golden brown, about 20 minutes. Stir in garlic, and cook, stirring often, 1 minute. Transfer onion mixture to a medium bowl, and wipe skillet clean.
Heat remaining 1 tablespoon oil in skillet over medium-high. Add ham, and cook, stirring often, until crisp, about 5 minutes. Remove ham from skillet, and drain on paper towels.
Add cream cheese, mozzarella, Parmesan, spinach, and ham to onion mixture in bowl, and stir until blended. Spoon mixture into cast-iron skillet. Cover and chill until ready to transport to tailgate. (Recipe can be made up to 1 day ahead. Be sure skillet cools completely before returning dip to skillet.) Transport to tailgate in a cooler.
Light 1 side of grill, heating to medium (350°F to 400°F), and leave other side unlit. Uncover skillet; place over unlit side of grill, and heat, covered with grill lid, stirring every 5 minutes, until cheese is melted and smooth, about 20 minutes. Serve with pita chips or toasted French bread slices.