А сам объект navigator не read only.
function setUserAgent(txt) {
var fakeNavigator = {}, oldNavigator = {}, x;
for (x in navigator) {
fakeNavigator[x] = (x != "userAgent") ? navigator[x] : fakeNavigator[x] = txt;
}
oldNavigator = navigator;
navigator = fakeNavigator;
return oldNavigator;
}
setUserAgent("ie 1.0 win 3.11 compatible");
alert(navigator.userAgent);
Возвращает старый объект navigator, на случай, если он вам будет нужен.