Position a rack about 8 inches from the broiler and preheat.
Melt the butter in a medium non-stick skillet over medium heat. Add the onions and season with 1/2 teaspoon salt and some pepper. Cook, stirring occasionally, until the onions get very soft, about 15 minutes. Meanwhile, whisk the eggs and milk in a medium bowl with the remaining 1/4 teaspoon salt and some pepper until smooth. Transfer onions to a bowl to cool. Reserve the skillet.
Stir the onions, ham, herbs and cheese into the eggs.
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 minutes. Transfer the skillet to the oven and broil until the eggs are just set and brown, about 5 minutes. Take care not to overcook or the eggs will be dry. Remove from the oven, cover, and set aside for 5 minutes.
Invert the frittata onto a large plate or platter. Cut into wedges and serve warm or at room temperature.