1) Position a rack about 20cm from the grill and preheat.
2) Melt the butter in a medium non-stick skillet over medium heat. Add the onions and season with 1/2 tsp salt and some pepper. Cook, stirring occasionally, until the onions get very soft, about 15 mins. Meanwhile, whisk the eggs and milk in a medium bowl with the remaining 1/4 tsp salt and some pepper until smooth. Transfer onions to a bowl to cool. Reserve the skillet.
3) Stir the onions, ham, herbs and cheese into the eggs.
4) Heat the non-stick skillet. Pour the frittata mixture into the pan and stir to make sure the fillings are evenly arranged. Cook, stirring gently a couple times in the first minutes of cooking. Then let the mixture cook undisturbed until the bottom sets, about 5 mins. Transfer the skillet to the oven and broil until the eggs are just set and brown, about 5 mins. Take care not to overcook or the eggs will be dry. Remove from the oven, cover, and set aside for 5 mins.
5) Invert the frittata onto a large plate or platter. Cut into wedges and serve warm or at room temperature.